2011-11-30 24 views
7

Traté de construir un script JS que iba a cambiar la ubicación de la página, para ir hacia atrás hasta una ubicación específica hash se encontró:history.back() no actualiza location.hash en Chrome/Firefox

var StopAtThisHash ='#'; 
var CurrentHash = window.location.hash; 
var continueLoop = true; 
while ((window.history.length>0) && (continueLoop)) 
{ 
     window.history.back(); 
     var NowWeAreAtHash = window.location.hash; //this never changes in Chrome 
     //actually, always seems to: CurrentHash == NowWeAreAtHash; 
     if(NowWeAreAtHash == StopAtThisHash) 
         continueLoop= false; 
} 

Lo suficientemente extraño, en Chrome y FF, el window.location.hash no se cambia después de atrás() .. tampoco es la duración del historial disminuido en 1 como esperaba. El ciclo se ejecuta indefinidamente y el navegador se cuelga.

En IE 9 esto parece funcionar como se esperaba.

¿Alguna solución alternativa al respecto?

+0

Quizás vea este http://stackoverflow.com/questions/2305069/can-you-use-hash-navigation-with-affecting-history porque puede usar 'history.replaceState (undefined, undefined," #hash_value ")' para reemplazar el valor hash – Hendry

Respuesta

0

Parece que window.history.back(), window.history.forward() y window.history.go() no cambia el historial, simplemente navega hacia adelante y hacia atrás. Si back() cambiara la duración del historial, entonces no podría forward().

Como solución, sugeriría que se repita el ciclo window.history con for del último al primero en lugar de while.

0
function goBackHome() { 
    goBackToHash(''); // Assume the home is without hash. You can use '#'. 
} 
function goBackToHash(hash) { 
    setTimeout(function() { 
     if (window.location.hash == hash) return; 
     history.back(); 
     goBackToHash(hash); 
    }, 0); 
} 

Para superar el problema de la while bucle, he intentado el uso setTimeout, pero esto es por lo general va más allá de lo esperado ... En espera de una solución perfecta.

Creo que hay un retraso entre history.back() y cuando se cambia window.location.hash.

Otra solución es mantener los valores hash en JS para que pueda averiguar cuántos pasos se necesitan en history.go(N).

Cuestiones relacionadas