Wie kann ich den Benutzer um Bestätigung bitten, bevor er die Seite wie in Google Mail verlässt?
Ich habe an verschiedenen Stellen nach dieser Frage gesucht, aber alles, was sie erwähnen, ist die Verwendung von Javascript window.unload & window.onbeforeunload . Außerdem funktioniert es meistens nicht in Chrom, da es blockiert wird.
onbeforeunload
Antworten:
Versuche dies:
<script> window.onbeforeunload = function (e) { e = e || window.event; // For IE and Firefox prior to version 4 if (e) { e.returnValue = 'Sure?'; } // For Safari return 'Sure?'; }; </script>
Hier ist eine funktionierende jsFiddle
quelle
event.target
, ob das Klickereignis von Ihrem Seitencontainer stammt.Versuche dies:
<script> window.onbeforeunload = function(e) { return 'Dialog text here.'; }; </script>
Weitere Infos hier MDN .
quelle
Ich habe Kommentare zum Antwortsatz " Okay" gelesen . Die meisten Benutzer bitten darum, dass die Schaltfläche und einige Links zum Klicken zugelassen werden. Hier wird dem vorhandenen Code eine weitere Zeile hinzugefügt, die funktioniert.
<script type="text/javascript"> var hook = true; window.onbeforeunload = function() { if (hook) { return "Did you save your stuff?" } } function unhook() { hook=false; }
Rufen Sie unhook () onClick für die Schaltfläche und die Links auf, die Sie zulassen möchten. Z.B
<a href="#" onClick="unhook()">This link will allow navigation</a>
quelle
onclick="hook = false;"
Die kürzeste Lösung für das Jahr 2020 (für diejenigen glücklichen Menschen, die IE nicht unterstützen müssen)
Getestet in Chrome, Firefox, Safari.
function onBeforeUnload(e) { if (thereAreUnsavedChanges()) { e.preventDefault(); e.returnValue = ''; return; } delete e['returnValue']; } window.addEventListener('beforeunload', onBeforeUnload);
Tatsächlich zeigt kein moderner Browser (Chrome, Firefox, Safari) den "Rückgabewert" als Frage an den Benutzer an. Stattdessen zeigen sie ihren eigenen Bestätigungstext (abhängig vom Browser). Wir müssen jedoch noch eine (sogar leere) Zeichenfolge zurückgeben, um diese Bestätigung in Chrome auszulösen.
Weitere Erklärungen finden Sie hier und hier auf MDN .
quelle
Einfach
function goodbye(e) { if(!e) e = window.event; //e.cancelBubble is supported by IE - this will kill the bubbling process. e.cancelBubble = true; e.returnValue = 'You sure you want to leave?'; //This is displayed on the dialog //e.stopPropagation works in Firefox. if (e.stopPropagation) { e.stopPropagation(); e.preventDefault(); } } window.onbeforeunload=goodbye;
quelle
Wenn Sie basierend auf der Bedingung fragen möchten:
var ask = true window.onbeforeunload = function (e) { if(!ask) return null e = e || window.event; //old browsers if (e) {e.returnValue = 'Sure?';} //safari, chrome(chrome ignores text) return 'Sure?'; };
quelle