Javascript location.href onchange event listener?

Je veux montrer un message chaque fois que vous quittez la page (pas une alerte ennuyeuse, juste un html vous disant d'attendre), en pensant à cela, je suis confronté à certaines difficultés:

Cela étant dit, le tir de l'événement est assez simple, avec juste comme

$(document).unload(function() { // display message }); 

Le problème est que, si l'utilisateur annule, le message ne disparaitrait pas.

Une solution possible serait:

 $(window).unload(function() { // display message setTimeout(function() { // hide message },5000); }); 

Mais je voulais savoir s'il y avait un moyen plus propre, que lorsque l'utilisateur annule la navigation (ou échoue pour toute autre raison), je peux masquer le message.

Édition n ° 2:

Je viens de remarquer qu'avec le code ci-dessus, dans FF, le message n'est pas affiché jusqu'à ce que la page soit restée, auquel cas l'utilisateur appuie sur Stop, il recevra environ: blank. S'il appuie sur Stop avant, le message ne s'affiche jamais. C'est exactement ce que je voulais.

Dans Internet Explorer, le message n'est jamais affiché, je suppose que c'est parce que IE gère les choses différemment. Je me demande ce qui se passe dans Chrome?

Voici une solution qui fonctionne dans tous les navigateurs. Il utilise l'attribut document.readyState qui fonctionne dans tous les navigateurs, sauf les versions antérieures FireFox (fonctionne dans la version 3.6.8). Si le navigateur prend en charge l'attribut readyState, il vérifiera si le ReadyState est chargé (le navigateur va vers une autre page) ou est complet (ou quelque chose d'autre indiquant que la page ne se dirige nulle part). Si le navigateur ne prend pas en charge le readyState, il sera par défaut pour votre solution.

 (function(){ var hideMessage=document.readyState?function(){ setTimeout(function(){ if(document.readyState=='loading'){ hideMessage(); }else{ //hide message } },500); }:function(){ // hide message } function displayMessage(){ // display message } window.onbeforeunload=function(){ displayMessage(); setTimeout(hideMessage,document.readyState?10:5000); }; }()); 

Quant au premier point:

Lorsque l'utilisateur appuie sur Arrêter dans le navigateur, en annulant l'action de navigation, j'aimerais que le message disparaisse.

J'ai eu la même question depuis un certain temps, et la réponse retentissante – également soutenue par mes recherches ultérieures – était que cela était impossible. Une fois que vous lancez une demande pour une nouvelle page, il est impossible de «revenir» de manière fiable par programme. Un délai d'attente peut en effet être le seul moyen d'aller.

Les deux autres points, cependant, devraient être relativement simples: traversez tous les liens (par exemple, en utilisant jQuery) et ajoutez un événement de click qui ouvre la fenêtre de confirmation et renvoie false afin que le fichier href original ne soit pas ouvert. Il devrait également être relativement facile de le faire uniquement pour les liens internes (vérifiez la propriété target , si elle est _blank , laissez le lien seul.)

Il peut être difficile de traiter des liens qui ont déjà des événements de click , mais d'autres événements conduisant à une page différente, comme les soumissions de formulaires.