2009-06-05 15 views
30

Betrachten Sie das folgende Javascript:Javascript .pathname IE Eigenart?

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

Wenn ich dies auf einer Seite ausführen, die Links im Format „http://foo.com/bar“, in IE8 enthält erhalte ich eine Zeichenfolge zurück, die wie „bar“ aussieht. In Safari, Chrome, Firefox, bekomme ich etwas wie "/ bar" (beachten Sie den führenden Schrägstrich).

Ist IE Schuld hier, was ist das Geschäft?

+3

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

Antwort

27

Die W3C standard on the window object - einschließlich der Standortschnittstelle - ist vom 07. April 2006 datiert, dh sie wurde spezifiziert, nachdem die tatsächlichen Implementierungen schon seit Jahren bestanden.

Der Standard lautet:

Pfadname

Dieses Attribut den Pfad Bestandteil der URI Standort darstellt, die von allem nach dem Host und Port bis zu und ohne die erste Frage besteht Zeichen (?) oder ein Rautenzeichen (#).

Das bedeutet, dass der führende Schrägstrich enthalten sein sollte, der mit Mozilla's implementation übereinstimmt. Die MSDN doc on the location object erwähnt nicht, was die Eigenschaft enthält, aber ein page on the VBScript location object hat ein Beispiel, das mit Ihrer Entdeckung übereinstimmt.

Wie gesagt, die Seite ist 1996 - zehn Jahre bevor das W3C involviert war - es ist kaum fair zu sagen, dass IE die Schuld trägt, aber ich würde es immer noch als Fehler ansehen.

-1

Verwenden Sie getAttribute, wenn Sie nach einem einfachen Weg suchen, dies zu überwinden.

See: Spec, MDN

Beispiel

HTML:

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

JS:

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

Dies wird die führende Schrägstrich als auch zurückgeben ("/ foo "). Und es wird von allen Browsern unterstützt, die DOM-Level-2 korrekt implementiert haben.

+1

Die Frage ist, wie man den ** Pfadnamen ** nur von einer vollständigen URL "http://foo.com/bar" konsistent für alle Browser erhält. – sincospi

+0

Oh, ich habe das total vermisst. – shem86