Existe-t-il un moyen d'exécuter un code JavaScript final lorsqu'un utilisateur ferme une fenêtre de navigateur ou actualise la page?
Je pense à quelque chose de similaire à onload mais plutôt à onclose? Merci.
Je n'aime pas la méthode onbeforeunload, qui cède toujours à une boîte de confirmation qui apparaît (quitter la page / rester sur mozilla) ou (recharger / ne pas recharger sur chrome). Existe-t-il un moyen d'exécuter le code tranquillement?
javascript
browser
Peter
la source
la source
Réponses:
Il y a les deux
window.onbeforeunload
etwindow.onunload
, qui sont utilisés différemment selon le navigateur. Vous pouvez les associer soit en définissant les propriétés de la fenêtre sur des fonctions, soit en utilisant.addEventListener
:Habituellement,
onbeforeunload
est utilisé si vous devez empêcher l'utilisateur de quitter la page (par exemple, l'utilisateur travaille sur des données non enregistrées, il doit donc enregistrer avant de quitter).onunload
n'est pas pris en charge par Opera , pour autant que je sache, mais vous pouvez toujours définir les deux.la source
Ok, j'ai trouvé une solution de travail pour cela, cela consiste à utiliser l'
beforeunload
événement puis à faire revenir le gestionnairenull
. Cela exécute le code souhaité sans qu'une boîte de confirmation ne s'affiche. Ca fait plutot comme ca:J'espère que cela t'aides.
la source
return false;
fait de même (c'est à dire empêche le comportement par défaut) et il est plus sémantiquement correct.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 lasendBeacon()
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:sendBeacon()
est pris en charge dans:Il n'est actuellement PAS pris en charge dans:
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.
la source
http://example.com/script.php?token=something&var1=val1&var2=val2
mettre ces valeurs dans GET.Version jQuery:
Mise à jour : jQuery 3:
Merci Garrett
la source
La documentation ici encourage l'écoute de l'événement onbeforeunload et / ou l'ajout d'un écouteur d'événement sur window.
Vous pouvez également simplement renseigner les propriétés .onunload ou .onbeforeunload de window avec une fonction ou une référence de fonction.
Bien que le comportement ne soit pas normalisé entre les navigateurs, la fonction peut renvoyer une valeur que le navigateur affichera lors de la confirmation de quitter la page.
la source
Vous pouvez utiliser
window.onbeforeunload
.la source
L'événement est appelé
beforeunload
, vous pouvez donc attribuer une fonction àwindow.onbeforeunload
.la source
Vous pouvez essayer quelque chose comme ceci:
la source