Necesito un evento que funcione al cerrar la página o pestaña, pero que tampoco se active al actualizar la página. Lo sé por "antes de descargar", pero eso aún funciona en la página de actualización.
Aquí está mi código
@HostListener('window:beforeunload', ['$event']) checkIsUserLogOut() { if (ConfigurationModel.applicationOptions.autoLogOutWhenWebBrowserClosed) { localStorage.removeItem('auth_token'); localStorage.removeItem('auth_token_expires_on'); } }Encontré un artículo para este problema exacto (no quiere activar el código al actualizar).
Utiliza una variable localStorage para guardar la fecha y hora del último evento de unload , y si es menos de una cantidad de tiempo preestablecida, lo considera una actualización.
el controlador de eventos de unload :
function unload(event) { if (window.localStorage) { // flag the page as being unloading window.localStorage['myUnloadEventFlag']=new Date().getTime(); } askServerToDisconnectUserInAFewSeconds(); // synchronous AJAX call }en la carga de la página:
function myLoad(event) { if (window.localStorage) { var t0 = Number(window.localStorage['myUnloadEventFlag']); if (isNaN(t0)) t0=0; var t1=new Date().getTime(); var duration=t1-t0; if (duration<10*1000) { // less than 10 seconds since the previous Unload event => it's a browser reload (so cancel the disconnection request) askServerToCancelDisconnectionRequest(); // asynchronous AJAX call } else { // last unload event was for a tab/window close => do whatever } } }Espero eso ayude.