¿Cuál es la mejor manera de detectar si un usuario abandona una página web?
El onunload
evento JavaScript no funciona cada vez (la solicitud HTTP tarda más que el tiempo requerido para terminar el navegador).
La creación de uno probablemente será bloqueada por los navegadores actuales.
javascript
ANaimi
fuente
fuente
Mozilla Developer Network tiene una buena descripción y un ejemplo de onbeforeunload .
Si desea advertir al usuario antes de abandonar la página si su página está sucia (es decir, si el usuario ha ingresado algunos datos):
fuente
Aquí hay una solución alternativa: dado que en la mayoría de los navegadores los controles de navegación (la barra de navegación, las pestañas, etc.) se encuentran sobre el área de contenido de la página, puede detectar el puntero del mouse que sale de la página por la parte superior y mostrar un " antes de salir " diálogo. Es completamente discreto y le permite interactuar con el usuario antes de que realmente realice la acción de irse.
La desventaja es que, por supuesto, es una suposición que el usuario realmente tiene la intención de irse, pero en la gran mayoría de los casos es correcto.
fuente
Para esto estoy usando:
Se dispara justo antes de que se descargue la página.
fuente
onbeforeunload
?Sé que esta pregunta ha sido respondida, pero en caso de que solo desee que algo se active cuando se cierra el NAVEGADOR real, y no solo cuando se produce una carga de página, puede usar este código:
En mi ejemplo, estoy limpiando el almacenamiento local y alertando al usuario con los ratones y los cables, solo cuando el navegador está cerrado, esto se ignorará en todas las cargas de página desde el programa.
fuente
e
variable en este caso) debe usarse: stackoverflow.com/questions/9813445/ ...This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user.
developer.mozilla.org/en-US/docs/Web/API/Window/eventUna forma (ligeramente hacky) de hacerlo es reemplazar y enlaces que se alejan de su sitio con una llamada AJAX al lado del servidor, lo que indica que el usuario se va, luego use ese mismo bloque de JavaScript para llevar al usuario al sitio externo He solicitado.
Por supuesto, esto no funcionará si el usuario simplemente cierra la ventana del navegador o escribe una nueva URL.
Para evitar eso, es posible que necesite usar setTimeout () de Javascript en la página, haciendo una llamada AJAX cada pocos segundos (dependiendo de qué tan rápido quiera saber si el usuario se ha ido).
fuente
Gracias a Service Workers , es posible implementar una solución similar a la de Adam únicamente en el lado del cliente, siempre que el navegador lo admita. Simplemente evite las solicitudes de latidos:
fuente
setInterval(() => fetch('/heartbeat'), 5000)
?En el caso de que necesite hacer un código asincrónico (como enviar un mensaje al servidor de que el usuario no está enfocado en su página en este momento), el evento
beforeunload
no dará tiempo para que se ejecute el código asíncrono. En el caso de async, descubrí que los eventosvisibilitychange
ymouseleave
son las mejores opciones. Estos eventos se disparan cuando el usuario cambia de pestaña, oculta el navegador o saca al curso del alcance de la ventana.fuente
Por lo que vale, esto es lo que hice y tal vez pueda ayudar a otros a pesar de que el artículo es antiguo.
PHP:
JS
Llamada Ajax a activeUser.php
Base de datos:
Básicamente, cada 5 segundos, el js publicará en un archivo php que rastreará al usuario y la dirección IP del usuario. Los usuarios activos son simplemente un registro de base de datos que tiene una actualización de la marca de tiempo de la base de datos en 5 segundos. Los viejos usuarios dejan de actualizar a la base de datos. La dirección IP se usa solo para garantizar que un usuario sea único, de modo que 2 personas en el sitio al mismo tiempo no se registren como 1 usuario.
Probablemente no sea la solución más eficiente, pero hace el trabajo.
fuente