218 votes

La meilleure façon de détecter quand un utilisateur quitte une page web ?

Quelle est la meilleure façon de détecter si un utilisateur quitte une page Web ?

Le site onunload L'événement JavaScript ne fonctionne pas à chaque fois (la requête HTTP prend plus de temps que le temps nécessaire à la fermeture du navigateur).

En créer un sera probablement bloqué par les navigateurs actuels.

235voto

Andreas Petersson Points 8096

Essayez le onbeforeunload événement : Il est déclenché juste avant le déchargement de la page. Il permet également de demander à l'utilisateur s'il veut vraiment partir. Voir la démo Démo onbeforeunload .

Vous pouvez également envoyer un Ajax demande quand il part.

3 votes

Il serait agréable pour l'utilisateur de savoir si le formulaire a changé et de ne l'inviter à le faire que si c'est le cas, afin que cela ne soit pas gênant.

3 votes

Notez également que plusieurs navigateurs mobiles ignorent le résultat de l'événement (c'est-à-dire qu'ils ne demandent pas de confirmation à l'utilisateur). Firefox a une préférence cachée dans about:config pour faire la même chose. En substance, cela signifie que l'utilisateur confirme toujours que le document peut être déchargé.

2 votes

Notez que cette méthode est également invoquée lorsque l'utilisateur rafraîchit la page ou soumet un formulaire.

28voto

DuckMaestro Points 4941

Mozilla Developer Network propose une belle description et un exemple de onbeforeunload .

Si vous voulez avertir l'utilisateur avant de quitter la page si votre page est sale (c'est-à-dire si l'utilisateur a saisi des données) :

window.addEventListener('beforeunload', function(e) {
  var myPageIsDirty = ...; //you implement this logic...
  if(myPageIsDirty) {
    //following two lines will cause the browser to ask the user if they
    //want to leave. The text of this dialog is controlled by the browser.
    e.preventDefault(); //per the standard
    e.returnValue = ''; //required for Chrome
  }
  //else: user is allowed to leave without a warning dialog
});

9voto

suhail Points 2520

Pour cela, j'utilise :

window.onbeforeunload = function (e) {

}

Il est déclenché juste avant le déchargement de la page.

4voto

user1822265 Points 79

Je sais que la réponse à cette question a déjà été donnée, mais si vous voulez que quelque chose se déclenche uniquement lorsque le navigateur est fermé, et pas seulement lorsqu'un chargement de page se produit, vous pouvez utiliser ce code :

window.onbeforeunload = function (e) {
        if ((window.event.clientY < 0)) {
            //window.localStorage.clear();
            //alert("Y coords: " + window.event.clientY)
        }
};

Dans mon exemple, j'efface le stockage local et j'alerte l'utilisateur avec les coordonnées y de la souris, uniquement lorsque le navigateur est fermé, ceci sera ignoré sur tous les chargements de page à partir du programme.

0 votes

Window.event est indéfini pour moi

1 votes

L'exemple de Merr Leader est erroné, window.event ne doit être utilisé qu'en tant que solution de repli, par exemple pour les anciennes versions d'IE. Dans les autres cas, le paramètre event (le paramètre e dans ce cas) doit être utilisée : stackoverflow.com/questions/9813445/

0 votes

Je n'irais pas jusqu'à dire que j'ai tort. Mes exemples fonctionnent pour moi dans IE et Chrome sans problème. Mon exemple correspondait au scénario dans lequel l'utilisateur clique sur le X (fermer) du navigateur Web. Ce n'est peut-être pas la façon la plus jolie, mais cela fonctionne.

3voto

Steve M Points 4852

Une façon (un peu bricolée) de le faire est de remplacer les liens qui mènent loin de votre site par un appel AJAX vers le serveur, indiquant que l'utilisateur quitte le site, puis d'utiliser le même bloc javascript pour amener l'utilisateur sur le site externe qu'il a demandé.

Bien entendu, cela ne fonctionnera pas si l'utilisateur ferme simplement la fenêtre du navigateur ou tape une nouvelle URL.

Pour contourner ce problème, il faudrait éventuellement utiliser la fonction setTimeout() de Javascript sur la page, en effectuant un appel AJAX toutes les quelques secondes (en fonction de la rapidité avec laquelle vous souhaitez savoir si l'utilisateur est parti).

4 votes

Si vous utilisez l'approche "report home", il n'est pas nécessaire de modifier chaque lien de la page.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X