Tengo una página web sencilla, a saber:¿Cómo hacer que Firefox active el evento popstate al volver desde una página en un dominio diferente?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>History hacks</title>
<script>
window.onpopstate = function (e) {
alert("location: " + document.location + ", state: " + JSON.stringify(e.state));
}
window.onload = function (e) {
alert('page loaded');
}
</script>
</head>
<body>
<p> <a href="http://www.yahoo.com">Yahoo</a> <a href="#part1">Part 1</a></p>
</body>
</html>
Ahora bien, hay una serie de diferencias con respecto a cómo Chrome y Firefox desencadenan el evento popstate (quiero ni pensar lo que yo estoy en contra cuando llegue en torno a probando IE), pero uno que me está dando problemas aquí es que Chrome activará un evento de estado emergente cada vez que haga clic en cualquiera de esos dos enlaces, y luego otra vez cuando presione el botón Atrás. Firefox activará el evento para el enlace que cambia la parte hash (solo la primera vez si el enlace hash es el mismo), y no lo activará en absoluto si hago clic en el enlace Yahoo y luego hago clic en el botón Atrás.
Entonces, ¿hay alguna forma de saber en Firefox que un usuario acaba de hacer clic atrás y aterrizar en mi página desde un sitio completamente diferente en un dominio diferente? ¿Hay algún otro evento que funcione para este fin en Firefox? (El evento de carga no se desencadena cuando vuelvo de yahoo.com.)
Esta es una gran respuesta para explicar cómo hacer que la API de la historia funciona de la misma plataforma, pero en realidad no responder OP pregunta: ** cómo saber si el usuario realmente hizo clic en "volver" para terminar en la página. ** Usando su ejemplo, puede ver que el usuario hizo clic en Chrome y Safari porque mytag no será nulo en el controlador onpopstate . Sin embargo, en firefox, onpopstate no se llama, por lo que parece que no hay forma de determinar si el usuario regresa a la página o si es la primera vez que lo hace. Entonces, ¿hay alguna forma de distinguir esto en Firefox? – Karmacon
@Karma: si desactivas el bfcache (mira la última parte de mi respuesta) entonces Firefox debería comportarse de manera similar a Chrome. Pero lea la respuesta de Boris Zbarsky para una buena ilustración de por qué debería preferir el caché de la página de Firefox al comportamiento de Chrome. –
Gracias @Sean Hogan. Después de volver a leer en Firefox bfCaching, me di cuenta de que no funciona en mi sitio porque usamos https. Firefox siempre actualiza la página. Supongo que no hay nada que pueda hacer al respecto. – Karmacon