Esto es causado por back-forward cache. Se supone que guarda el estado completo de la página cuando el usuario navega fuera. Cuando el usuario navega hacia atrás, la página del botón Atrás se puede cargar desde la memoria caché muy rápidamente. Esto es diferente del caché normal que solo almacena en caché el código HTML.
Cuando se carga la página para bfcache onload
el evento no se desencadenará. En su lugar, puede consultar la propiedad persisted
del evento onpageshow
. Se establece en falso en la carga de la página inicial. Cuando la página se carga desde bfcache, se establece en verdadero.
window.onpageshow = function(event) {
if (event.persisted) {
alert("From back/forward cache.");
}
};
Por alguna razón, jQuery no tiene esta propiedad en el evento. Aunque puedes encontrarlo desde el evento original.
$(window).bind("pageshow", function(event) {
if (event.originalEvent.persisted) {
alert("From back/forward cache.");
}
});
La solución rápida a estos problemas es volver a cargar la página cuando se presiona el botón Atrás. Sin embargo, esto anula cualquier efecto positivo que la caché de atrás/adelante daría.
window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload()
}
};
Como anotación al margen, se puede ver gran cantidad de páginas que ofrecen el uso de vacío onunload
controlador como solución. Esto no ha funcionado desde iOS5.
$(window).bind("unload", function() { });
Es posible que desee intentar agregar todas las URL de los enlaces con '?' Si aún no está presente. Por ejemplo: 'href =" next.html "' become 'href =" next.html? "'. Esto daría una pista al navegador web de que el contenido de la página es dinámico e ir nuevamente a esa página debería volver a cargar la página desde el servidor. Esto debería aplicarse también a los scripts externos. Por ejemplo: 'src =" mylib.js "' become 'src =" mylib.js? "'. – Jay