2008-09-29 9 views

Répondre

195

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

Vous pouvez également envoyer une demande Ajax à son départ.

+3

Ce serait sympa pour l'utilisateur si vous suiviez si le formulaire changeait et si vous le demandiez seulement si c'était le cas - donc ce n'est pas ennuyeux. – adam0101

+3

Notez également que divers 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 environ: config pour faire de même. En substance, cela signifie que l'utilisateur confirme toujours que le document peut être déchargé. – MJB

+0

Notez que cette méthode évoque également lorsque l'utilisateur actualise la page ou soumet un formulaire. –

3

Une façon (légèrement hacky) de le faire est de remplacer et les liens qui mènent loin de votre site avec un appel AJAX vers le serveur, indiquant que l'utilisateur quitte, puis utiliser ce même bloc javascript pour amener l'utilisateur à le site externe qu'ils ont demandé.

Bien sûr, cela ne fonctionnera pas si l'utilisateur ferme simplement la fenêtre du navigateur ou tape une nouvelle URL. Pour contourner cela, vous devrez potentiellement utiliser setTimeout() de Javascript sur la page, en faisant un appel AJAX toutes les quelques secondes (selon la vitesse à laquelle vous voulez savoir si l'utilisateur a quitté).

+4

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

10

Pour cela, je me sers:

window.onbeforeunload = function (e) { 

} 

Il est tiré juste avant que la page est chargée.

+0

Opera 12 et les versions plus anciennes ne supporte pas cette ... http://www.zachleat.com/web/dont-let-the-door-hit-you-onunload-and-onbeforeunload/ – Cyrus

3

Je sais que cette question a été répondu, mais au cas où vous ne souhaitez que quelque chose à déclencher lorsque la NAVIGATEUR réelle est fermé, et pas seulement quand un pageload 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) 
     } 
}; 

En par exemple, je nettoie le stockage local et j'alerte l'utilisateur avec les coordonnées de la souris, mais seulement lorsque le navigateur est fermé, ceci sera ignoré sur toutes les charges de pages du programme.

+0

window.event est définie pour me –

+0

l'exemple leader Merr est erroné, window.event ne doit être utilisé comme solution de repli par exemple pour les anciennes versions de IE, dans d'autres cas, doit être utilisé le paramètre d'événement (la variable 'e' dans ce cas): http://stackoverflow.com/questions/9813445/why-ff-says-that-window-event-is-undefined-call-function-with-added-event-list/9813624#9813624 – Sk8erPeter

+0

ne serait-aller aussi loin que de dire J'ai tort. Mes exemples fonctionnent pour moi dans IE et Chrome très bien. Mon exemple était pour le scénario que l'utilisateur clique sur le X (fermer) sur le navigateur Web. Ni la plus jolie façon peut-être, mais ça marche. –

1

Voici une solution alternative - puisque dans la plupart des navigateurs les contrôles de navigation (barre de navigation, onglets, etc.) sont situés au-dessus de la zone de contenu de la page, vous pouvez détecter le pointeur de la souris. une boîte de dialogue "avant de quitter". Il est complètement discret et il vous permet d'interagir avec l'utilisateur avant ils effectuent effectivement l'action de partir.

$(document).bind("mouseleave", function(e) { 
    if (e.pageY - $(window).scrollTop() <= 1) {  
     $('#BeforeYouLeaveDiv').show(); 
    } 
}); 

L'inconvénient est que bien sûr, il est une estimation que l'utilisateur a réellement l'intention de partir, mais dans la grande majorité des cas, il est correct.

Questions connexes