2011-03-21 9 views
6

No tengo dudas de que probablemente estén documentados en internet y indexados por Google, pero después de leer páginas y páginas de enlaces a discusiones sobre deshabilitando la funcionalidad pensé que podría preguntar si alguien puede dar respuestas útiles sobre la mera detección de su uso.¿Cómo detectar el botón Atrás y la nueva ventana?

El método descrito en uno de los better articles al deshabilitar el botón Atrás solo funciona al crear una transición de página, por lo que no se usa mucho para la detección.

La presencia de window.history.next podría proporcionar un mecanismo para detectar el botón Atrás, pero ¿cuán ampliamente compatible es? ¿Requiere privilegios inusuales?

Jonathan's answer a esta publicación parece prometedor, pero supone que puedo establecer el nombre de la ventana en el primer aterrizaje, supongo que podría utilizar la ausencia de una cookie para detectar el primer golpe. ¿Alguna otra idea?

TIA

+2

Jonathan de responder a mi parece prometedor, pero la respuesta aceptada por bobince es la correcta: no se puede. La única forma razonable es construir su aplicación en el lado del servidor para que funcione incluso cuando el usuario regrese. No es tan difícil y protege contra otras acciones del usuario "inesperadas" como volver a cargar, enviar formularios dos veces, abrir ventanas adicionales, etc. – RoToRa

+0

He estado jugando y puedo detectar la mayoría de las instancias de ventanas nuevas usando history.length en MSIE y Firefox . es decir, la respuesta de Jonathan es válida para la mayoría de las ventanas nuevas (ver mi comentario allí). Pero con respecto al botón Atrás: history.next está protegido en Firefox. Desafortunadamente, la fijación de la base de código actual no es una opción. – symcbean

Respuesta

0

escribí algo de código hace un tiempo. La secuencia de comandos nunca se probó por completo, pero debería poder extraer algunas técnicas para obtener el mismo efecto que detectar el botón Atrás.

http://pastebin.no/32fx

+0

Gracias Christian - Me encontré con esta publicación (http://stackoverflow.com/questions/136937/is-there-a-way-to-catch-the-back-button-event-in- javascript/2348076 # 2348076) desde que hice mi pregunta, que tiene un enfoque similar. Definitivamente este parece el método correcto para resolver el problema – symcbean

+0

Si terminas usando mi script, me gustaría ver lo que has hecho con él :) –

0

Utilice sessionStorage/localStorage.

if (!sessionStorage.hasBeenHereBefore) sessionStorage.hasBeenHereBefore = true; 
else { 
    // Code to run if they've been here before. 
} 

Si utiliza sessionStorage, a continuación, si se cierra el navegador y volver, parecerá como la primera vez, pero si se utiliza localStorage entonces va a quedarse para siempre.

Usted puede tratar de buscar algunos eventos secretas como:

window.addEventListener('historyback', function() {}, false); 
window.addEventListener('navigateback', function() {}, false); 
window.addEventListener('returntopage', function() {}, false); 
+0

Creo que esa es una respuesta a una pregunta diferente, no la que pregunté. El problema que intento mitigar es cuando el estado de una sesión en el servidor no coincide con la ubicación actual seleccionada por un usuario. – symcbean

+0

Lo sé, pero realmente esto es lo más cercano que vas a obtener en este momento. Podrías probar un montón de eventos de ventana. (Ejemplos en la respuesta) – Kayla

Cuestiones relacionadas