2009-08-11 16 views
22

Tengo un código de javascript que, en un punto, establece window.location.hash en una cadena específica. Esto funciona bien en Firefox 3, pero quiero saber si tendré problemas con esto más adelante, es decir, ¿se trata de una solución multiplataforma (IE6 incluido)?Posibles problemas de configuración window.location.hash

Además, estoy usando ReallySimpleHistory. ¿Esto arruinará su estado interno?

Gracias

Respuesta

24

window.location.hash ha existido desde JavaScript se introdujo en Netscape Navigator 2 en el año 1995. Fue apoyado por primera vez por Microsoft en Internet Explorer 3 en 1996. Creo que se puede estar razonablemente seguro de que todos los navegadores capaces JS-lo soporta.

De un vistazo rápido a través de la fuente, parece que ReallySimpleHistory hace un uso bastante extenso de esta propiedad, por lo que puede romperla. Es posible que desee utilizar su método add(newLocation) en su lugar (que funciona mediante la configuración window.location.hash).

+0

Gracias. Estaba evitando el método add() a propósito porque tontamente quería evitar establecer un punto de historial, pero esto resulta imposible – Cameron

15

Obtener:

var hash = location.hash.slice(1); 

Set:

location.hash = '#' + 'string'; 
+1

Estoy tratando de cambiar el hash, no lo leí – Cameron

+0

Lo siento, actualicé mi publicación. – Thinker

+5

¿Por qué no usar la propiedad location.hash?Para eso sirve, y como ha existido desde Netscape Navigator 2 (1995), puede apostar que es compatible con todos los dispositivos. – NickFitz

3

Configuración window.location.hash funciona bien en IE6 IE7 &.

En algunas ocasiones, leer window.location.hash bajo IE6 justo después de un conjunto devolverá el valor anterior, pero el navegador ha configurado el hash correctamente. Un ejemplo:

alert(window.location.hash); 
window.location.hash = '#newHash'; 

/* Sometimes, it will return the old value, 
    I haven't figured out why it does that, and 
    it's rather rare. */ 
alert(window.location.hash); 

Si solo lo está utilizando para configurarlo, no debería tener ningún problema.

4

Todos los navegadores "modernos" (a.k.a A-Graded) permiten configurar el hash y no volver a cargar la página al hacerlo. Los que recargan la página son algunos de los más antiguos, como Safari 2.0.4 y Opera 8.5x.

Ver my Usenet post on comp.lang.javascript donde lo explico con un poco más de detalle.

También tenga en cuenta que HTML5 finalmente especifica que el configurador de hash debe cambiar el hash real, pero no vuelve a cargar la página.

+0

+1, esta debería ser la respuesta aceptada. – Pacerier

10

Hilo viejo lo sé, pero window.location.hash está sujeto a un límite de tamaño también. Si transfiere grandes cantidades de datos y desea guardar el estado en el hash, podría tener algunos problemas.

IE le dará el error: SCRIPT5 - Access denied. si intenta asignar un hash que está por encima del límite que es muy útil.

Sólo algo para pensar.

+0

+1. Es bueno saberlo, gracias! – Cameron

+0

Gracias, muy útil. Al tratar de ingresar la url directamente en el IE, si es demasiado larga, es "simplemente" cortada ... –

+0

¡Me salvaste la vida con esto, muchas gracias! –

Cuestiones relacionadas