Wie kann verhindert werden, dass eine Webseite mit JavaScript weg navigiert?
javascript
onbeforeunload
Software-Enthusiasten
quelle
quelle
Antworten:
Mit
onunload
können Sie Nachrichten anzeigen, die Navigation wird jedoch nicht unterbrochen (da es zu spät ist). Die Verwendungonbeforeunload
unterbricht jedoch die Navigation:Hinweis: Eine leere Zeichenfolge wird zurückgegeben, da neuere Browser eine Meldung wie "Nicht gespeicherte Änderungen gehen verloren" anzeigen, die nicht überschrieben werden kann.
In älteren Browsern können Sie die Nachricht angeben, die in der Eingabeaufforderung angezeigt werden soll:
quelle
window.onbeforeunload = function() { return ""; }
Im Gegensatz zu anderen hier vorgestellten Methoden führt dieser Code nicht dazu, dass der Browser eine Warnung anzeigt, in der der Benutzer gefragt wird, ob er das Programm verlassen möchte. Stattdessen wird die ereignisreiche Natur des DOM ausgenutzt, um zur aktuellen Seite zurückzukehren (und damit die Navigation abzubrechen), bevor der Browser die Möglichkeit hat, sie aus dem Speicher zu entladen.
Da die Navigation direkt kurzgeschlossen wird, kann nicht verhindert werden, dass die Seite geschlossen wird. Es kann jedoch verwendet werden, um das Frame-Busting zu deaktivieren.
Haftungsausschluss: Sie sollten dies niemals tun. Wenn eine Seite einen Frame-Busting-Code enthält, respektieren Sie bitte die Wünsche des Autors.
quelle
Am Ende hatte ich diese etwas andere Version:
An anderer Stelle setze ich das Dirty-Flag auf true, wenn das Formular schmutzig wird (oder ich möchte auf andere Weise verhindern, dass ich weg navigiere). Auf diese Weise kann ich leicht steuern, ob der Benutzer die Eingabeaufforderung Navigation bestätigen erhält oder nicht.
Mit dem Text in der ausgewählten Antwort sehen Sie redundante Eingabeaufforderungen:
quelle
undefined
statt null enden würde. (1) es ist bedingt (2) es erwähnt "schmutzig" den häufigsten legitimen Grund, die Navigation zu behindern, und (3) es hat einen Screenshot.Das Äquivalent auf modernere und browserkompatiblere Weise unter Verwendung moderner addEventListener-APIs.
Quelle: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload
quelle
event.returnValue
In Aymans Beispiel verhindern Sie durch die Rückgabe von false, dass das Browserfenster / die Registerkarte geschlossen wird.
quelle
Das Äquivalent zur akzeptierten Antwort in jQuery 1.11:
JSFiddle-Beispiel
Die Antwort von altCognito verwendete das
unload
Ereignis, das zu spät auftritt, als dass JavaScript die Navigation abbrechen könnte.quelle
Verwenden Sie onunload .
Für jQuery funktioniert das meiner Meinung nach folgendermaßen:
quelle
unload
Ereignis wird ausgelöst, wenn der Benutzer die Seite verlässt, im Gegensatz zu dem Ereignis,beforeunload
das kurz zuvor ausgelöst wurde (und möglicherweise abgebrochen wird)Diese vorgeschlagene Fehlermeldung kann die Fehlermeldung duplizieren, die der Browser bereits anzeigt. In Chrome werden die beiden ähnlichen Fehlermeldungen nacheinander im selben Fenster angezeigt.
In Chrome lautet der nach der benutzerdefinierten Nachricht angezeigte Text: "Möchten Sie diese Seite wirklich verlassen?". In Firefox wird unsere benutzerdefinierte Fehlermeldung überhaupt nicht angezeigt (der Dialog wird jedoch weiterhin angezeigt).
Eine geeignetere Fehlermeldung könnte sein:
Oder Stackoverflow-Stil: "Sie haben begonnen, einen Beitrag zu schreiben oder zu bearbeiten."
quelle
Wenn Sie eine Browser-Zurück / Vorwärts-Schaltfläche abfangen und nicht weg navigieren möchten, können Sie Folgendes verwenden:
Andernfalls können Sie das Ereignis beforeunload verwenden , die Nachricht funktioniert jedoch möglicherweise browserübergreifend oder nicht und erfordert die Rückgabe von Informationen , die eine integrierte Eingabeaufforderung erzwingen.
quelle