Cuando uso el botón Atrás en Firefox para llegar a una página visitada anteriormente, los scripts de esa página no se ejecutarán nuevamente .
¿Existe alguna solución / solución alternativa para que los scripts se ejecuten nuevamente al ver la página por segunda vez?
Tenga en cuenta que he probado las mismas páginas en Google Chrome e Internet Explorer y funcionan según lo previsto.
Estos son los archivos y los pasos que utilicé para probar el problema:
(navegue a 0.html, haga clic para llegar a 1.html, botón de retroceso)
0.html
<html><body>
<script>
window.onload = function() { alert('window.onload alert'); };
alert('inline alert');
</script>
<a href="1.html">Click Me!</a>
</body></html>
1.html
<html><body>
<p>Go BACK!</p>
</body></html>
javascript
firefox
Patonza
fuente
fuente
Eso es correcto y eso es bueno.
Cuando pulsa un enlace en Firefox (y Safari y Opera), no destruye inmediatamente su página para pasar a la siguiente. Mantiene la página intacta, simplemente ocultándola de la vista. Si presiona el botón Atrás, volverá a ver la página anterior, sin tener que cargar el documento nuevamente; esto es mucho más rápido, lo que resulta en transiciones de página hacia atrás / adelante más suaves para el usuario.
Esta característica se llama bfcache .
Cualquier contenido que haya agregado a la página durante la carga y el uso anteriores del usuario seguirá estando allí. Todos los controladores de eventos que adjuntó a los elementos de la página seguirán estando adjuntos. Los tiempos de espera / intervalos que establezca seguirán activos. Por lo tanto, rara vez hay alguna razón por la que deba saber que lo han ocultado y vuelto a mostrar. Sería incorrecto volver a llamar
onload
o al código de secuencia de comandos en línea, porque cualquier enlace y generación de contenido que hiciera en esa función se ejecutaría una segunda vez sobre el mismo contenido, con resultados potencialmente desastrosos. (por ejemplo,document.write
en un script en línea destruiría totalmente la página).La razón por la que escribir a
window.onunload
tiene un efecto es que los navegadores que implementan bfcache han decidido que, por compatibilidad con las páginas que realmente necesitan saber cuándo se descartan, cualquier página que declare un interés en saber cuándoonunload
ocurre hará que bfcache estar discapacitado. Esa página se cargará nueva cuando vuelva a ella, en lugar de recuperarse de bfcache.Entonces, si configura
window.onunload= function() {};
, lo que realmente está haciendo es romper deliberadamente el bfcache. Esto hará que sus páginas sean lentas para navegar y no deben usarse excepto como último recurso.Si necesita saber cuándo el usuario sale o vuelve a su página, sin estropear el bfcache, puede capturar los eventos
onpageshow
y en suonpagehide
lugar:window.onload=window.onpageshow= function() { alert('Hello!'); };
fuente
document.ready
funcionará esencialmente de la misma manera quewindow.onload
(para algunos navegadores, son el mismo evento de todos modos).Puede consultar la
persisted
propiedad delpageshow
evento. Se establece en falso en la carga de la página inicial. Cuando la página se carga desde la caché, se establece en verdadero.window.onpageshow = function(event) { if (event.persisted) { alert("From bfcache"); } };
Por alguna razón, jQuery no tiene esta propiedad en el evento. Sin embargo, puedes encontrarlo en el evento original.
$(window).bind("pageshow", function(event) { if (event.originalEvent.persisted) { alert("From bfcache"); } });
fuente
Conecte en un evento "onunload" que no hace nada:
<html><body> <script type="text/javascript"> window.onload = function() { alert('window.onload alert'); }; window.onunload = function(){}; alert('inline alert'); </script> <a href="1.html">Click Me!</a> </body></html>
fuente
onpopstate
, cuando se hizo esta pregunta hace casi cinco años, el evento aún era relativamente nuevo y el soporte del navegador era muy inconsistentePor lo que yo sé, Firefox no activa el
onLoad
evento en la parte posterior.Debería activarse onFocus en su lugar basado en este enlace aquí .
fuente
Una forma sencilla de hacer que una página ejecute JavaScript cuando el usuario vuelve a ella utilizando el historial del navegador es el evento OnPopState. Usamos esto para pausar y reproducir el video en nuestra página de inicio ( https://fynydd.com ).
window.onpopstate = function() { // Do stuff here... };
fuente
para algunos casos, como operaciones ajax, se puede usar el oyente de cambio de URL
$(window).on('hashchange', function() { .... });
fuente