Подтвердить что ты не робот

Javascript.pathname IE quirk?

Рассмотрим следующий Javascript:

var anchors = document.getElementsByTagName('a');
for(var i=0; i < anchors.length; i++)
{
    alert(a.pathname);
}

Когда я запускаю это на странице, содержащей ссылки в формате " http://foo.com/bar, в IE8 я возвращаю строку, которая выглядит как" бар ". В Safari, Chrome, Firefox, я возвращаю что-то вроде" /bar " (обратите внимание на ведущую косую черту).

Является ли IE ошибкой здесь, что сделка?

4b9b3361

Ответ 1

стандарт W3C на объекте окна - включая интерфейс определения местоположения - датирован 07 апреля 2006 года, то есть он был указан после фактических реализаций вокруг в течение многих лет.

Стандарт гласит:

путь к файлу

Этот атрибут представляет собой компонент пути URI местоположения, который состоит из всего после хоста и порта до и исключения первого вопросительного знака (?) или хеш-метки (#).

Это означает, что должна быть включена ведущая косая черта, которая согласуется с реализацией Mozilla.

документ MSDN для объекта местоположения не упоминает, что содержит свойство, но в объекте местоположения VBScript имеет пример, соответствующий вашему обнаружению.

Как сказано на странице © 1996 - за десять лет до участия W3C - вряд ли можно сказать, что IE виноват, но я все равно считаю это ошибкой.

Ответ 2

Нечетная вещь в этом поведении заключается в том, что window.location.pathname возвращает ведущую косую черту (после имени хоста) во всех версиях IE, как и все другие браузеры.

Это только объект местоположения гиперссылки ( "элемент" ), который возвращает путь без косой черты в IE (и Opera).

Ответ 3

Используйте getAttribute, если вы ищете простой способ преодолеть это.

Смотрите: Spec, MDN

Пример

HTML:

<a href="/foo" id="foo">

JS:

document.getElementById("foo").getAttribute("href");

Это также вернет косую черту ( "/foo" ). И он поддерживается во всех браузерах с правильной реализацией DOM-Level-2.