Comment empêcher la fermeture de la fenêtre du navigateur?
J'ai essayé le code suivant pour obtenir une alerte lors de la fermeture d'une fenêtre de navigateur:
window.onbeforeunload = confirmExit;
function confirmExit() {
return "You have attempted to leave this page. If you have made any changes to the fields without clicking the Save button, your changes will be lost. Are you sure you want to exit this page?";
}
Il fonctionne, mais si la page contient un lien hypertexte, en cliquant sur cet hyperlien pose la même alerte. J'ai besoin d'afficher l'alerte que lorsque je ferme la fenêtre du navigateur et non pas en cliquant sur les hyperliens.
- Voté pour la réouverture. La duplication liée ne pas répondre à la question, mais les réponses sont ici.
- FWIW, je viendrai vous poignarder dans le petit orteil si vous mettez ce comportement dans n'importe quelle application que j'ai à utiliser. Le détournement de navigateur est un godawful solution à ce problème. Ne pouvez-vous pas simplement utiliser de l'AJAX ou quelque chose et auto-enregistrer leur état?
- Je suis en désaccord avec Graham-parfois une alerte de confirmation est tout ce dont vous avez besoin. Accordé ce peut être (et est souvent abusé par les sites d'essayer de vous empêcher de partir, mais ils sont utilisés adéquatement, il peut être beaucoup apprécié, par exemple, si vous oubliez de poster quelque chose.
- Vous aurez toujours des problèmes si vous voulez vous rafraîchir la page, même si vous désactivez le point d'ancrage des événements.
Vous devez vous connecter pour publier un commentaire.
Garder votre code est et utiliser jQuery pour gérer les liens:
Une autre application est la suivante, vous pouvez le trouver dans cette page:
http://ujap.de/index.php/view/JavascriptCloseHook
Ce qu'elle fait est que vous utilisez une variable comme un drapeau.
hook = false
. Checkout cette DÉMO.addEventListener()
au lieu deonclick
attribut (ou.onbeforeunload = ...
).addEventListener
travaux dans tous les navigateurs. Si vous pensez que IE <= 8 est un navigateur trop, vous pouvez utiliserattachEvent
méthode, qui a pratiquement les mêmes fonctionnalités.Vous pouvez détecter les liens hypertexte de clics, mais vous ne pouvez pas déterminer si l'utilisateur:
Toutes ces actions génèrent
beforeunload
événement surwindow
, sans renseignements plus précis sur l'événement.Afin d'afficher la boîte de dialogue de confirmation lorsque vous faites des actions ci-dessus, et de ne pas l'afficher lorsqu'un lien hypertexte a été cliqué, suivez ces étapes:
beforeunload
écouteur d'événement àwindow
, qui retourne le texte de confirmation comme une chaîne de caractères, sauf une variable spécifique (flag) est mis àtrue
.click
événement àdocument
. Vérifier sia
élément a été cliqué (event.target.tagName
). Si oui, définir le drapeau àtrue
.Vous devez également gérer les soumissions de formulaires par l'affectation d'un
submit
écouteur d'événement àdocument
.Votre code pourrait ressembler à ceci:
JS:
HTML:
Noter que dans certains navigateurs, vous devez utiliser
event.returnValue
dansbeforeunload
à l'écoute, et dans d'autres, vous utilisezreturn
déclaration.Voir aussi
beforeunload
événement docs.