A volte potresti voler far sapere al server che l'utente sta abbandonando la pagina. Ciò è utile, ad esempio, per ripulire le immagini non salvate memorizzate temporaneamente sul server, per contrassegnare quell'utente come "offline" o per registrare quando ha terminato la sua sessione.
Storicamente, invieresti una richiesta AJAX nella beforeunload
funzione, tuttavia questo ha due problemi. Se invii una richiesta asincrona, non vi è alcuna garanzia che la richiesta venga eseguita correttamente. Se invii una richiesta sincrona, è più affidabile, ma il browser si bloccherà fino al termine della richiesta. Se questa è una richiesta lenta, questo sarebbe un enorme inconveniente per l'utente.
Fortunatamente, ora abbiamo navigator.sendBeacon()
. Utilizzando il sendBeacon()
metodo, i dati vengono trasmessi in modo asincrono al server web quando lo User Agent ha la possibilità di farlo, senza ritardare lo scaricamento o influenzare le prestazioni della navigazione successiva. Ciò risolve tutti i problemi con l'invio dei dati di analisi: i dati vengono inviati in modo affidabile, vengono inviati in modo asincrono e non influisce sul caricamento della pagina successiva. Ecco un esempio del suo utilizzo:
window.addEventListener("unload", logData, false);
function logData() {
navigator.sendBeacon("/log.php", analyticsData);
}
sendBeacon()
è supportato in:
- Bordo 14
- Firefox 31
- Chrome 39
- Safari 11.1
- Opera 26
- iOS Safari 11.4
NON è attualmente supportato in:
- Internet Explorer
- Opera Mini
Ecco un polyfill per sendBeacon () nel caso in cui sia necessario aggiungere il supporto per i browser non supportati. Se il metodo non è disponibile nel browser, invierà invece una richiesta AJAX sincrona.