175 votes

Comment peut-on prévenir le javascript de la page à partir de naviguer à l'extérieur?

Comment peut-on prévenir le javascript de la page à partir de naviguer à l'extérieur?

214voto

Jimmie R. Houts Points 3761

À l'aide de onunload vous permet seulement d'afficher des messages, mais de ne pas interrompre la navigation (parce que c'est trop tard). Toutefois, vous pouvez utiliser onbeforeunload et il va interrompre la navigation:

window.onbeforeunload = function() {
  return "Are you sure you want to navigate away?";
}

EDIT: Supprimé confirmer() dans une instruction de retour comme cela a provoqué une fenêtre de confirmation comme prévu, mais a également montré un deuxième confirmer avec le résultat de la première confirmer.

28voto

Alec Points 143

Je sais que c'est vieux, et je suis d'accord, il ne devrait jamais être fait, mais dans l'intérêt de toute la connaissance, cet extrait ne sera pas permettre à l'utilisateur de quitter la page.

var allowLeaving;

(function() {
  var bIntercepting = false;

  var oInterceptingInterval = window.setInterval(function() {
    if(bIntercepting) {
      document.location.href = document.location.href + '#__' + Math.random();
      bIntercepting = false;
    }
  }, 1);

  window.addEventListener('beforeunload', function() {
    bIntercepting = true;
  }, false);

  window.addEventListener('unload', function() {
    bIntercepting = true;
  }, false);

  allowLeaving = function() {
    window.clearInterval(oInterceptingInterval);
  };
})();

Elle exporte une seule méthode allowLeaving qui le désactive. Cette même technique peut également être utilisé pour prévenir cadre de l'éclatement de dans la plupart des navigateurs.

16voto

Danger Points 415

J'ai fini avec cette version légèrement différente:

var dirty = false;
window.onbeforeunload = function() {
    return dirty ? "If you leave this page you will lose your unsaved changes." : null;
}

D'ailleurs j'ai mis le drapeau sale à true lorsque le formulaire est sali (ou sinon je veux éviter de naviguer à l'extérieur). Cela me permet de facilement contrôler si oui ou non l'utilisateur obtient le Confirmer invite de Navigation.

Avec le texte de la réponse choisie vous voir redondant invites:

enter image description here

7voto

gabor Points 612

Dans Ayman exemple, en retournant false vous empêcher le navigateur de la fenêtre/onglet à partir de la clôture.

window.onunload = function () {
  alert('You are trying to leave.');
  return false;
}

3voto

altCognito Points 23944

Utilisation onunload.

Pour jQuery, je pense que cela fonctionne comme ceci:

$(window).unload(function() { 
  alert("Unloading"); 
  return falseIfYouWantToButBeCareful();
});

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