it-swarm.com.de

Ist es möglich, eine benutzerdefinierte Nachricht im Before-Unload-Popup anzuzeigen?

Ist es bei Verwendung von window.onbeforeunload (Oder $(window).on("beforeonload")) möglich, eine benutzerdefinierte Nachricht in diesem Popup anzuzeigen?

Vielleicht ein kleiner Trick, der in großen Browsern funktioniert?

Wenn ich mir die vorhandenen Antworten anschaue, habe ich das Gefühl, dass dies in der Vergangenheit mit Dingen wie confirm oder alert oder event.returnValue Möglich war, aber jetzt scheinen sie nicht mehr zu funktionieren.

Wie wird eine benutzerdefinierte Nachricht im Before-Unload-Popup angezeigt? Ist das überhaupt noch möglich?

44
Ionică Bizău

Um eine Bestätigungsnachricht festzulegen, bevor der Benutzer das Fenster schließt, können Sie verwenden

jQuery

$(window).bind("beforeunload",function(event) {
    return "You have some unsaved changes";
});

Javascript

window.onbeforeunload = function() {
    return "Leaving this page will reset the wizard";
};


Es ist wichtig zu bemerken, dass Sie kann nicht put confirm/alert innerhalb beforeunload


Noch ein paar Anmerkungen:

  1. [~ # ~] nicht alle Browser [~ # ~] unterstützen dies (weitere Informationen im Abschnitt Browserkompatibilität auf MDN )
  2. In Firefox MÜSSEN Sie eine echte Interaktion mit der Seite durchführen, damit diese Meldung dem Benutzer angezeigt wird.
  3. Jeder Browser kann Ihrer Nachricht einen eigenen Text hinzufügen.

Hier sind die Ergebnisse mit den Browsern, auf die ich Zugriff habe:

Chrome:

Chrome alert on exit

Firefox:

Firefox alert on exit

Safari:

Safar alert on exit

IE:

IE alert on exit

Nur um sicherzugehen, müssen Sie eine Abfrage enthalten

Weitere Informationen zur Browserunterstützung und zum Entfernen der benutzerdefinierten Nachricht:

  1. Chrome entfernt Unterstützung für benutzerdefinierte Nachrichten in Version 51
  2. Opera entfernt Unterstützung für benutzerdefinierte Nachrichten in Version 38
  3. Firefox hat die Unterstützung für benutzerdefinierte Nachrichten in Version 44.0 entfernt (es wird immer noch nach der Quelle für diese Informationen gesucht)
  4. Safari entfernt Unterstützung für benutzerdefinierte Nachrichten in Version 9.1
103
Dekel

Ist es bei Verwendung von window.onbeforeunload (Oder $(window).on("beforeonload")) möglich, eine benutzerdefinierte Nachricht in diesem Popup anzuzeigen?

Nicht mehr. Alle gängigen Browser haben damit begonnen, die eigentliche Nachricht zu ignorieren und nur ihre eigene zu zeigen.

Wenn ich mir die vorhandenen Antworten anschaue, habe ich das Gefühl, dass dies in der Vergangenheit mit Dingen wie confirm oder alert oder event.returnValue Möglich war, aber jetzt scheinen sie nicht mehr zu funktionieren.

Richtig. Vor langer Zeit konnten Sie confirm oder alert verwenden, vor kurzem konnten Sie eine Zeichenfolge von einem onbeforeunload -Handler zurückgeben, und diese Zeichenfolge wäre angezeigt. Jetzt wird der Inhalt der Zeichenfolge ignoriert und als Flag behandelt.

Wenn Sie jQueries on verwenden, müssen Sie tatsächlich returnValue für das ursprüngliche Ereignis verwenden:

$(window).on("beforeunload", function(e) {
    // Your message won't get displayed by modern browsers; the browser's built-in
    // one will be instead. But for older browsers, best to include an actual
    // message instead of just "x" or similar.
    return e.originalEvent.returnValue = "Your message here";
});

oder auf die altmodische Weise:

window.onbeforeunload = function() {
    return "Your message here"; // Probably won't be shown, see note above
};

Das ist alles was du tun kannst.

16
T.J. Crowder

Ich habe gerade ein Div angezeigt, das eine Nachricht im Hintergrund anzeigt. Es ist hinter dem Modal, aber das ist besser als nichts. Es ist ein bisschen zwielichtig, aber zumindest können Sie Ihrem Benutzer einige Informationen darüber geben, warum Sie ihn/sie stören, nicht zu gehen.

constructor($elem)
{
    $(window).unbind().bind('beforeunload', (e) => this.beforeUnload(e));
}
beforeUnload(e)
{
    $('#leaveWarning').show();
    setTimeout(function(){
        $('#leaveWarning').hide();
    }, 1); // set this to 1ms .. since timers are stopped for this modal,
           // the message will disappear right after the user clicked one of the options  
    return "This message is not relevant in most modern browsers.";
}

Hier ist eine funktionierende Fiddle https://jsfiddle.net/sy3fda05/2/

2
Andy Killat