Question

Est-il possible de créer une boîte de confirmation personnalisée pour l'événement onbeforeunload dans un navigateur? J'ai essayé, mais je reçois 2 boîtes de confirmation (un de moi qui est rien de plus que confirmer le retour ... et le standard du navigateur).

À l'heure actuelle mon code ressemble à:

var inputChanged = false;

$(window).load(function() {
    window.onbeforeunload = navigateAway;
    $(':input').bind('change', function() { inputChanged = true; });
});

function navigateAway(){
    if(inputChanged){
        return 'Are you sure you want to navigate away?';
    }
}

J'utilise jQuery pour cela.

Était-ce utile?

La solution

window.onbeforeunload = function (e) {
  var message = "Your confirmation message goes here.",
  e = e || window.event;
  // For IE and Firefox
  if (e) {
    e.returnValue = message;
  }

  // For Safari
  return message;
};

S'il vous plaît noter: La plupart des navigateurs ont mis ce message après un autre texte. Vous ne disposez pas d'un contrôle complet du contenu de la boîte de dialogue de confirmation.

Autres conseils

Non, vous ne pouvez pas éviter le standard du navigateur. Tout ce que vous pouvez faire est d'injecter un texte personnalisé en elle; si vous utilisez le gestionnaire d'événement suivant (enregistré le chemin lib prototype):

Event.observe(window, "beforeunload", function(event) {
    if (showMyBeforeUnloadConfirmation)
        event.returnValue = "foo bar baz";
});

(et showMyBeforeUnloadConfirmation est vrai), vous obtenez une confirmation standard avec le texte suivant du navigateur:

  

Êtes-vous sûr de vouloir naviguer loin de cette page?

     

foo bar baz

     

Appuyez sur OK pour continuer ou Annuler pour rester sur la page en cours.

     

[OK] [Annuler]

Je fait face au même problème, je suis en mesure d'obtenir sa propre boîte de dialogue avec mon message, mais les problèmes que j'ai rencontrés étaient:

  1. Il a été de donner un message sur tous les navigations et je voulais seulement pour, cliquez sur Fermer.
  2. Avec mon propre message de confirmation si l'utilisateur sélectionne « Annuler », il affiche toujours la boîte de dialogue par défaut du navigateur.

Voici le code de solutions que je trouve que j'écrit sur ma page principale.

function closeMe(evt) {
    if (typeof evt == 'undefined') {
        evt = window.event;
    }
    if (evt && evt.clientX >= (window.event.screenX - 150) && evt.clientY >= -150 && evt.clientY <= 0) {
        return "Do you want to log out of your current session?";
    }
}

window.onbeforeunload = closeMe;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top