Javascript .pathname IE quirk?

时间:2009-06-05 14:39:16

标签: javascript internet-explorer

考虑以下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 个答案:

答案 0 :(得分:28)

W3C standard on the window object - 包括位置界面 - 日期为2006年4月7日,即在实际实施已经存在多年后指定。

标准如下:

  

<强>路径名

     

此属性表示Location的URI的路径组件,该URI包含主机和端口之后的所有内容,包括第一个问号(?)或井号(#)。

这意味着应包含前导斜杠,这与Mozilla's implementation一致。

MSDN doc on the location object未提及该属性包含的内容,但page on the VBScript location object有一个与您的发现一致的示例。

正如所述页面是©1996 - 在W3C参与前十年 - 说IE出错是不公平的,但我仍然认为这是一个错误。

答案 1 :(得分:17)

这种行为的奇怪之处在于 window.location.pathname 在IE的所有版本中返回前导斜杠(在主机名之后),与所有其他浏览器相同。

只有超链接('一个元素')的位置对象才能返回IE中没有斜杠的路径(以及Opera)。

答案 2 :(得分:-1)

如果您正在寻找一种简单的方法来解决这个问题,请使用getAttribute。

请参阅:SpecMDN

示例

HTML:

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

JS:

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

这将返回前导斜杠(&#34; / foo&#34;)。 并且所有正确实现DOM-Level-2的浏览器都支持它。