2017-03-17 4 views
-2

Edit: Diese Frage ist anders, da ich für eine Lösung in 2017 Browser frage. Die andere Frage bezieht sich auf Browser seit Jahren. Auch gibt es keine Lösung. Es muss eine Lösung geben, und darum bitte ich.Html - beforeunload - Cross Browser

Ich habe ein Ereignis-Listener hinzugefügt:

addEventListener("beforeunload", MyBeforeUnload, false); 

Ich habe meine Funktion:

function MyBeforeUnload() { 
    if(!g_IsSaved) { 
     return "You have not saved your data. If you leave this page without saving, your data will be lost."; 
    }else { 
    // Do not return anything if ok to leave 
    } 
} 

Dies löst und zeigt eine Warnmeldung im Internet Explorer.

Es löst die Funktion aus und gibt die Zeichenfolge korrekt zurück, ABER löst die Warnmeldung in Chrome, Edge oder Firefox beim Schließen des Browsers mit der Schaltfläche [x] oben rechts im Browser nicht aus.

Ist es möglich, diesen funktionierenden Cross-Browser 2017 zu bekommen?

+1

Nichts hat sich seit den letzten paar Malen geändert. Siehe auch http://stackoverflow.com/q/11317573/215552, http://stackoverflow.com/q/4683221/215552, http://Stackoverflow.com/q/38879742/215552, http: // stackoverflow. com/q/1921941/215552 –

+0

Der erste Link in Mikes 2. Kommentar hat eine besonders gute Antwort darauf, warum dies nicht möglich ist. – BSMP

+0

Die Frage ist die gleiche, auch wenn sich die Antworten geändert haben. Wir möchten die Antworten auf eine bestehende Frage aktualisieren (wenn sie aktualisiert werden können) und keine neuen Kopien der Frage erstellen. –

Antwort

0

versuchen, es zu verwenden, wie, dass es in Cross-Browser

window.addEventListener("beforeunload", function(e) { 
    var confirmationMessage = "You have not saved your data. If you leave this page without saving, your data will be lost."; 

    if (!g_IsSaved) { 
     (e || window.event).returnValue = confirmationMessage; //Gecko + IE 
     return confirmationMessage; //Webkit, Safari, Chrome etc. 
    } else { 
     // Do not return anything if ok to leave 
    } 
}); 


Aber Chrome hat beschlossen, arbeiten sollte die Möglichkeit, eine benutzerdefinierte Meldung im onbeforeunload Dialog zu entfernen, um zu vermeiden scamming

Sehen Sie dieses bug report vom 18. Februar 2016.

onbeforeunloaddialoge werden für zwei th. Verwendet auf dem Modern Web:
1. Verhindern, dass Benutzer versehentlich Daten verlieren.
2. Scamming Benutzer.

+0

Danke für die Idee, aber das scheint sogar IE von der Arbeit zu stoppen. – Rewind

+1

Chrome hat sich entschieden, die Möglichkeit zum Einrichten einer benutzerdefinierten Nachricht im Dialogfeld "onbeforeunload" zu entfernen, um Betrug zu vermeiden und Benutzer daran zu hindern, versehentlich Daten zu verlieren. –