Acabo de encontrar un comportamiento extraño en Firefox 3.6/Mac. Sin embargo, sospecho que es un comportamiento general de Firefox.El redireccionamiento de JavaScript (location.href) rompe el botón Atrás a menos que se use setTimeout()
creé dos páginas de prueba muertos-simples que cambian la propiedad window.location.href
para navegar hasta nueva URL:
- http://troy.onespot.com/static/stack_overflow/redirect.html
- http://troy.onespot.com/static/stack_overflow/redirect_timeout.html
Si intenta lo siguiente con cualquiera de los archivos:
- Abra una pestaña del navegador nueva/en blanco.
- Pega la URL y presiona "Enter".
Notarás una diferencia entre las dos: utilizando el primer enlace, el botón "Atrás" del navegador está deshabilitado; usando el segundo, está habilitado y funciona como yo esperaba.
La única diferencia entre los dos scripts es que este último establece un tiempo de espera de un segundo antes de cambiar window.location.href
.
No sé por qué sucede esto, y estoy tratando de lograr el comportamiento del segundo script (donde el botón "Atrás" sigue funcionando como se espera) sin causar ningún retraso para el usuario.
Mi mejor conjetura es que tal vez Firefox trata a un inmediato "redirigir" mediante el establecimiento de window.location.href
lo mismo que usar el método window.location.replace()
, ya que creo que es común para los desarrolladores utilizar la antigua cuando la intención de utilizar este último. Tal vez al usar setTimeout
, dado que esto hace que el código se ejecute de forma asincrónica, se anula este comportamiento. ¿Podría ser ese el caso?
No he experimentado con el valor mínimo para setTimeout
para lograr el efecto deseado, pero lo haré ahora. Sin embargo, me gustaría descubrir por qué sucede esto exactamente.
Gracias!
La primera funciona perfectamente para mí: presione el botón Atrás y regrese a esta página. Por el segundo, una vuelta muestra una página en blanco, el segundo vuelve aquí. Si abro en una pestaña nueva, la primera funciona como se espera, no hay respaldo disponible. El segundo vuelve a una página en blanco. Estos son todos los comportamientos exactos que esperaría de su descripción. –
@Skip Head - ¿por qué? ¿por qué simplemente establecer un tiempo de espera cambia el comportamiento? – sje397
Probó algunos navegadores más para usted: sucede en Chrome en Linux/Mac y Opera para Mac. No ocurre en Safari para Mac o Firefox para Linux. – Robert