2009-06-05 7 views
30

Considere el siguiente JavaScript:Javascript .pathname IE quirk?

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

Cuando ejecuto esto en una página que contiene enlaces en el formato "http://foo.com/bar", en IE8 que regrese una cadena que se ve como "barra". En Safari, Chrome, Firefox, recupero algo como "/ bar" (tenga en cuenta la barra diagonal anterior).

IE es la culpa aquí, ¿cuál es el problema?

+3

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

Respuesta

27

La W3C standard on the window object, que incluye la interfaz de ubicación, está fechada el 7 de abril de 2006, es decir, se especificó después de que las implementaciones reales llevaban años funcionando.

La norma dice:

ruta

Este atributo representa el componente de trazado de la URI de la ubicación, que consiste en todo después de que el host y el puerto hasta y excluyendo el primer signo de interrogación (?) o marca hash (#).

Esto significa que debe incluirse la barra diagonal, que es coherente con Mozilla's implementation.

El MSDN doc on the location object no menciona lo que contiene la propiedad, pero un page on the VBScript location object tiene un ejemplo consistente con su descubrimiento.

Como dicha página es © 1996, diez años antes de que se involucrara el W3C - no es justo decir que IE tiene la culpa, pero igual lo consideraría un error.

-1

Use getAttribute si está buscando una manera fácil de superar esto.

Ver: Spec, MDN

Ejemplo

HTML:

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

JS:

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

Esto devolverá la barra inicial, así ("/ foo "). Y es compatible con todos los navegadores que tienen DOM-Level-2 implementado correctamente.

+1

La pregunta es cómo obtener ** la ruta de acceso ** solo, de una URL completa "http://foo.com/bar", de manera consistente para todos los navegadores. – sincospi

+0

Oh, lo extrañé totalmente. – shem86