Javascript .pathname IE чудак? - PullRequest
31 голосов
/ 05 июня 2009

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

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

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

Здесь виноват IE, в чем дело?

Ответы [ 3 ]

28 голосов
/ 05 июня 2009

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

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

* 1009 путь *

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

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

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

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

17 голосов
/ 05 июня 2009

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

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

0 голосов
/ 08 февраля 2015

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

См .: Спецификация , MDN

Пример

HTML:

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

JS:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...