¿Hay alguna forma de ejecutar un código JavaScript final cuando un usuario cierra una ventana del navegador o actualiza la página?
Estoy pensando en algo similar a onload pero más como onclose? Gracias.
No me gusta el método onbeforeunload, que siempre produce un cuadro de confirmación que aparece (dejar la página / permanecer en mozilla) o (recargar / no recargar en Chrome). ¿Hay alguna forma de ejecutar el código de forma silenciosa?
javascript
browser
Pedro
fuente
fuente
Respuestas:
Existen ambos
window.onbeforeunload
ywindow.onunload
, que se utilizan de forma diferente según el navegador. Puede asignarlos configurando las propiedades de la ventana en funciones o usando.addEventListener
:Por lo general,
onbeforeunload
se usa si necesita evitar que el usuario abandone la página (por ejemplo, el usuario está trabajando en algunos datos no guardados, por lo que debe guardarlos antes de salir).onunload
no es compatible con Opera , hasta donde yo sé, pero siempre puedes configurar ambos.fuente
Ok, encontré una solución funcional para esto, consiste en usar el
beforeunload
evento y luego hacer que el controlador regresenull
. Esto ejecuta el código deseado sin que aparezca un cuadro de confirmación. Es algo parecido a esto:Espero que esto ayude.
fuente
return false;
hace lo mismo (es decir, evita el comportamiento predeterminado) y es más semánticamente correcto.A veces, es posible que desee informar al servidor que el usuario está abandonando la página. Esto es útil, por ejemplo, para limpiar imágenes no guardadas almacenadas temporalmente en el servidor, para marcar a ese usuario como "fuera de línea" o para iniciar sesión cuando haya terminado su sesión.
Históricamente, enviaría una solicitud AJAX en la
beforeunload
función, sin embargo, esto tiene dos problemas. Si envía una solicitud asincrónica, no hay garantía de que la solicitud se ejecute correctamente. Si envía una solicitud sincrónica, es más confiable, pero el navegador se bloqueará hasta que finalice la solicitud. Si esta es una solicitud lenta, esto sería un gran inconveniente para el usuario.Afortunadamente, ahora tenemos
navigator.sendBeacon()
. Al utilizar elsendBeacon()
método, los datos se transmiten de forma asincrónica al servidor web cuando el Agente de usuario tiene la oportunidad de hacerlo, sin retrasar la descarga ni afectar el rendimiento de la siguiente navegación. Esto resuelve todos los problemas con el envío de datos analíticos: los datos se envían de manera confiable, se envían de forma asincrónica y no afecta la carga de la página siguiente. Aquí hay un ejemplo de su uso:sendBeacon()
es compatible con:Actualmente NO es compatible con:
Aquí hay un polyfill para sendBeacon () en caso de que necesite agregar soporte para navegadores no compatibles. Si el método no está disponible en el navegador, enviará una solicitud AJAX sincrónica en su lugar.
fuente
http://example.com/script.php?token=something&var1=val1&var2=val2
poner esos valores en GET.Versión de jQuery:
Actualización : jQuery 3:
Gracias Garrett
fuente
La documentación aquí anima a escuchar el evento onbeforeunload y / o agregar un detector de eventos en la ventana.
También puede completar las propiedades .onunload o .onbeforeunload de la ventana con una función o una referencia de función.
Aunque el comportamiento no está estandarizado en todos los navegadores, la función puede devolver un valor que el navegador mostrará al confirmar si abandona la página.
fuente
Puede utilizar
window.onbeforeunload
.fuente
Se llama al evento
beforeunload
, por lo que puede asignar una función awindow.onbeforeunload
.fuente
Puedes probar algo como esto:
fuente