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.
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 onloado 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.writeen un script en línea destruiría totalmente la página).
La razón por la que escribir a window.onunloadtiene 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ándo onunloadocurre 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 onpageshowy en su onpagehidelugar:
window.onload=window.onpageshow= function() {
alert('Hello!');
};