Parfois, vous souhaiterez peut-être informer le serveur que l'utilisateur quitte la page. Ceci est utile, par exemple, pour nettoyer les images non enregistrées stockées temporairement sur le serveur, pour marquer cet utilisateur comme "hors ligne" ou pour se connecter quand il a terminé sa session.
Historiquement, vous enverriez une requête AJAX dans la beforeunload
fonction, mais cela pose deux problèmes. Si vous envoyez une demande asynchrone, il n'y a aucune garantie que la demande sera exécutée correctement. Si vous envoyez une requête synchrone, elle est plus fiable, mais le navigateur se bloque jusqu'à ce que la requête soit terminée. S'il s'agit d'une demande lente, ce serait un énorme inconvénient pour l'utilisateur.
Heureusement, nous l'avons maintenant navigator.sendBeacon()
. En utilisant la sendBeacon()
méthode, les données sont transmises de manière asynchrone au serveur Web lorsque l'agent utilisateur a la possibilité de le faire, sans retarder le déchargement ni affecter les performances de la navigation suivante. Cela résout tous les problèmes liés à la soumission des données d'analyse: les données sont envoyées de manière fiable, elles sont envoyées de manière asynchrone et cela n'a pas d'impact sur le chargement de la page suivante. Voici un exemple de son utilisation:
window.addEventListener("unload", logData, false);
function logData() {
navigator.sendBeacon("/log.php", analyticsData);
}
sendBeacon()
est pris en charge dans:
- Bord 14
- Firefox 31
- Chrome 39
- Safari 11.1
- Opéra 26
- iOS Safari 11.4
Il n'est actuellement PAS pris en charge dans:
- Internet Explorer
- Opera Mini
Voici un polyfill pour sendBeacon () au cas où vous auriez besoin d'ajouter la prise en charge des navigateurs non pris en charge. Si la méthode n'est pas disponible dans le navigateur, elle enverra à la place une requête AJAX synchrone.