2009-06-05 12 views
30

Rozważmy następujący Javascript:JavaScript .pathname IE quirk?

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

Gdy uruchomię to na stronie, która zawiera linki w formacie „http://foo.com/bar” w IE8 wrócę ciąg znaków, który wygląda jak „bar”. W Safari, Chrome, Firefox otrzymuję coś w stylu "/ bar" (zwróć uwagę na wiodący ukośnik).

Czy jest to wina IE, o co chodzi?

+3

http://blogs.msdn.com/b/ieinternals/archive/2011/02/28/internet-explorer-window-location-nazwisko-missing-slash-i-host-has-port.aspx – EricLaw

Odpowiedz

27

The W3C standard on the window object - w tym interfejs lokalizacji - jest opatrzony datą 07 kwietnia 2006 r., Tj. Został określony po faktycznych wdrożeniach od lat.

Standardowa brzmi:

ścieżka

Ten atrybut reprezentuje komponent ścieżki lokalizacji na URI, który składa się z wszystkiego po hosta i portu aż do wyłączając pierwszy znak zapytania (?) lub znak krzyżyka (#).

Oznacza to, że należy dołączyć wiodący ukośnik, co jest zgodne z Mozilla's implementation.

W obiekcie MSDN doc on the location object nie podano informacji o właściwości, ale page on the VBScript location object ma przykład zgodny z Państwa odkryciem.

Jak mówi strona jest © 1996 - dziesięć lat przed zaangażowaniem W3C - nie jest sprawiedliwe stwierdzenie, że IE jest winne, ale nadal uważam to za błąd.

-1

Skorzystaj z getAttribute, jeśli szukasz łatwego sposobu na pokonanie tego problemu.

Zob Spec, MDN

Przykład

HTML:

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

JS:

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

to zwraca ukośnika, jak również ("/ foo "). Jest on obsługiwany we wszystkich przeglądarkach z prawidłowo zaimplementowanym DOM-Level-2.

+1

Pytanie brzmi, jak uzyskać ** ścieżkę ** tylko z pełnego adresu URL "http://foo.com/bar", w spójny sposób dla wszystkich przeglądarek. – sincospi

+0

Och, całkowicie to przegapiłem. – shem86

Powiązane problemy