Pregunta

Mi aplicación tiene páginas con varias pestañas que simplemente cambian el contenido visible. Sin embargo, la página también tiene enlaces que agregarán pestañas a la página. Además, la aplicación recuerda (con cookies) qué pestaña vio por última vez en caso de que la página se actualice (la configuración estricta de la memoria caché causa actualizaciones incluso cuando se usan los botones de retroceso y avance).

Mi problema es que la primera vez que visite este conjunto de páginas, debería mostrar la primera pestaña (Pestaña A). Luego, hace clic en un enlace, agrega una pestaña y recuerda esa nueva pestaña (Pestaña B). Sin embargo, si responde, ahora parece que no hizo nada porque recuerda y muestra la última pestaña en la que hizo clic (pestaña B).

Recordar la pestaña B es un comportamiento deseable si hace clic en reenviar a una nueva página y luego usa nuestro historial en la aplicación para volver a la página anterior. Sin embargo, no es deseable si hace clic en el botón Atrás, porque desea que vuelva a mostrar la pestaña A, como lo hizo cuando llegó por primera vez.

Mi pregunta es si el evento onunload de JavaScript puede detectar la diferencia entre salir de la página con el Botón Atrás, o por algún otro medio. En este punto, quiero que olvide cualquier pestaña que haya recordado para esa página.

¿Fue útil?

Solución

Si la diferencia que está tratando de detectar es entre un usuario que hace clic en un enlace y se aleja de la página de alguna otra manera, puede detectar un clic en un enlace usando JavaScript adjuntando onclick controladores de eventos a cada enlace que desea observar clics en.

Entonces, si onunload se dispara sin que <a> se haya disparado primero, el usuario abandona la página de otra manera que no sea haciendo clic en uno de sus enlaces rastreados.

<script type="text/javascript">
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
    links[i].onclick = setGlobal;
}
function setGlobal() {
    window.linkClicked = true;
}
window.onunload = function() {
    if (typeof window.linkClicked === 'undefined' || !window.linkClicked) {
        // they are leaving some other way than by clicking a link
    }
}
</script>

Se vuelve un poco más complicado si ya tiene <=> eventos en sus etiquetas <=>, si ese es el caso, puedo proporcionarle una forma de hacerlo también.

Por supuesto, también puede adjuntar a todos los <=> eventos usando jQuery u otra biblioteca de JavaScript.

Otros consejos

Los navegadores recuerdan el estado de los temporizadores (llamadas setTimeout) que se realizaron en esa página.

La primera vez que se cargue la página, se llamará a onLoad, configure un temporizador que reenvíe a la página siguiente en función del historial. Si ya está en la última página, no hay problema: D, si no, se reenviará.

Para IE, siempre se llama a onLoad, sin importar si está con el botón Atrás, por lo tanto, puede colocar la misma porción de código allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top