2009-06-05 36 views
30

考慮下面的JavaScript:Javascript .pathname IE quirk?

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這裏有毛病,這是怎麼回事?

+3

http://blogs.msdn.com/b/ieinternals/archive/2011/02/28/internet-explorer-window-location-pathname-missing-slash-and-host-has-port.aspx – EricLaw 2011-02-28 00:31:05

回答

27

W3C standard on the window object - 包括位置接口 - 在2006年4月07,也就是說,它實際後實施已經很多年了規定。

標準如下:

路徑

這個屬性代表它由主機和端口最多,但不包括第一個問號(後一切的位置的URI的路徑組成部分? )或哈希標記(#)。

這意味着應該包含前導斜槓,這與Mozilla's implementation一致。

MSDN doc on the location object沒有提及該屬性包含的內容,但page on the VBScript location object有一個與您的發現一致的示例。

正如所說頁面©1996 - 十年W3C參與進來之前 - 這是不公平的說,IE是錯的,但我仍然認爲這是一個錯誤。

-1

使用的getAttribute如果傻冒尋找一種簡單的方法來克服這一點。

見:SpecMDN

HTML:

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

JS:

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

這將返回斜線以及(「/富「)。 而且它支持在具有DOM-Level-2的正確實現所有的瀏覽器。

+1

問題是如何從一個完整的URL「http://foo.com/bar」中以一致的方式獲取所有瀏覽器的**路徑名**。 – sincospi 2015-02-13 07:50:12