ventana una sesion saber recarga pestaña pagina navegador modal evento ejecutar detectar cuando cierra cerrar antes alerta abandono javascript events

sesion - ¿Hay alguna forma en javascript para detectar si el evento de descarga se produce a través de una actualización, el botón Atrás o el cierre del navegador?



evento cerrar pestaña js (3)

Esta pregunta ya tiene una respuesta aquí:

Actualmente estoy mirando el evento "descargar" de una ventana para tratar de determinar cómo se desencadenó el evento de "descarga", pero estoy teniendo poco éxito. ¿Hay alguna forma de determinar cómo se activó el evento javascript?

  • Actualización de página
  • Botón Atrás (o navegar fuera de la página)
  • Cerrando el navegador

Básicamente, necesito ejecutar algunos códigos solo cuando la ventana del navegador se cierra, no se refresca ni se navega.

Propósito: cuando un cliente hace una actualización de nuestro software, la actualización redirigirá su primera solicitud de Internet a una página de oferta. Hay un botón para la opción "No molestar", pero algunos usuarios simplemente cerrarán su navegador. Al cerrar el navegador, necesito duplicar la funcionalidad "No molestar" para que el usuario ya no sea redirigido a la página de ofertas. Simplemente adjuntarse al evento "descargar" no funcionará debido a las diferentes formas de salir de una página.


No, y si lo hubiera, dependería del navegador. ¿Qué tipo de código estás tratando de ejecutar cuando el usuario cierra la página? ¿Es para desconectarse del usuario? Entonces, el usuario no se desconectaría si el navegador se bloquea o la conexión de red se rompe (y probablemente no si la computadora pasa al modo de suspensión / hibernación).

Si es para fines de cierre de sesión, probablemente debería usar una variable de marca de tiempo en el servidor que se actualiza con cada solicitud (o usar un ajax-ping), y cerrar la sesión del usuario si no se ha visto durante un tiempo específico.

Actualización: Encontré esta respuesta aquí en .


Sí, hay una solución!

Diseñé una solución basada en eventos onBeforeUnload + onLoad, almacenamiento local HTML5 y comunicación cliente / servidor. Vea los detalles en https://.com/a/13916847/698168 .


Utilizo un método para hacer "sniffing" de teclado, en el sentido de que busca la clave de "F5", "ctrl + r", "alt-f4", "retroceso" y otros, y si los encuentra fluyendo a través del evento del teclado queue, establece las variables booleanas apropiadamente para atrapar ese estado ... luego yo uso un manejador de funciones "onbeforeunload", que prueba contra esas variables de estado booleanas para decidir qué hacer.

Incluso puede cerrar varios trazos del teclado (por ejemplo, "ctrl + n" o "F1") utilizando preventDefault (), bubbles = false y returnValue = false en el manejo de su teclado.

Esto no es para corazones débiles, ¡pero es ciertamente factible con un poco de persistencia y muchas pruebas cruzadas de navegador!