He usado el evento en otros proyectos/juegos, pero parece que no funciona en este. El evento onload está funcionando bien aunque.
El script está vinculado en la parte inferior del html antes de la etiqueta </body>
el código en client.js
(() => { // Player Closes window window.addEventListener("beforeunload", function (e) { sock.emit('player-leave', player); alert('window.addEventListener'); }); window.onbeforeunload = function(event) { sock.emit('player-leave', player); alert('window.onbeforeunload'); }; window.onunload = function(event) { sock.emit('player-leave', player); alert('window.onunload'); }; })();
El evento no pasa y no se muestra ninguna alerta.
Enlace al repositorio de git para el código completo: https://github.com/Tw1ster95/drawitgame
EDITAR: Supongo que encontré una manera de usar la identificación del socket para la desconexión del reproductor, pero todavía me pregunto por qué no se emite antes de descargar.
No es el problema de onbeforeonload
. Las razones por las que la alert
no funciona es porque el navegador moderno ignorará la alert()
cuando se hace beforeunload
.
La especificación HTML establece que las llamadas a los métodos window.alert(), window.confirm() y window.prompt() pueden ignorarse durante el evento beforeunload. Consulte la especificación HTML para obtener más detalles.
Compruébalo aquí
Si ejecuta su página web y sigue presionando una tecla de recarga, es posible que pueda ver el mensaje de error Blocked alert() when beforeunload
en la consola.