it-swarm.com.de

Es wurde versucht, das Schließen-Ereignis des Browsers zu erkennen

Ich habe viele Methoden ausprobiert, um das Schließen eines Browsers durch jQuery oder JavaScript zu erkennen. Leider konnte ich das Ende nicht erkennen. Die Methoden onbeforeunload und onunload funktionieren ebenfalls nicht.

Wie erkenne ich die Fenster close, unload oder beforeunload -Ereignisse?

50
vjeta

Hast du diesen Code ausprobiert?

window.onbeforeunload = function (event) {
    var message = 'Important: Please click on \'Save\' button to leave this page.';
    if (typeof event == 'undefined') {
        event = window.event;
    }
    if (event) {
        event.returnValue = message;
    }
    return message;
};

$(function () {
    $("a").not('#lnkLogOut').click(function () {
        window.onbeforeunload = null;
    });
    $(".btn").click(function () {
        window.onbeforeunload = null;
});
});

Die zweite Funktion ist optional, um die Aufforderung beim Klicken auf die Elemente #lnkLogOut und .btn zu vermeiden.

Eine weitere Sache: Die benutzerdefinierte Aufforderung funktioniert in Firefox nicht (auch in der neuesten Version). Weitere Informationen dazu finden Sie unter this thread. 

56
Ravimallya

Unter Bezugnahme auf verschiedene Artikel und einige Versuchs- und Fehlertests habe ich schließlich diese Idee entwickelt, die perfekt für mich funktioniert.

Die Idee bestand darin, das Entladeereignis zu erkennen, das durch Schließen des Browsers ausgelöst wird. In diesem Fall befindet sich die Maus außerhalb des Fensters und zeigt auf die Schaltfläche zum Schließen ('X') .

$(window).on('mouseover', (function () {
    window.onbeforeunload = null;
}));
$(window).on('mouseout', (function () {
    window.onbeforeunload = ConfirmLeave;
}));
function ConfirmLeave() {
    return "";
}
var prevKey="";
$(document).keydown(function (e) {            
    if (e.key=="F5") {
        window.onbeforeunload = ConfirmLeave;
    }
    else if (e.key.toUpperCase() == "W" && prevKey == "CONTROL") {                
        window.onbeforeunload = ConfirmLeave;   
    }
    else if (e.key.toUpperCase() == "R" && prevKey == "CONTROL") {
        window.onbeforeunload = ConfirmLeave;
    }
    else if (e.key.toUpperCase() == "F4" && (prevKey == "ALT" || prevKey == "CONTROL")) {
        window.onbeforeunload = ConfirmLeave;
    }
    prevKey = e.key.toUpperCase();
});

Die ConfirmLeave-Funktion gibt die Popup-Standardmeldung aus, falls die Nachricht angepasst werden muss, und gibt den anzuzeigenden Text anstelle einer leeren Zeichenfolge in function ConfirmLeave () zurück.

37
shiv

Versuchen Sie, folgenden Code für mich in einer Linux-Chrome-Umgebung zu verwenden. Stellen Sie vor dem Ausführen sicher, dass Jquery an das Dokument angehängt ist.

$(document).ready(function()
{
    $(window).bind("beforeunload", function() { 
        return confirm("Do you really want to close?"); 
    });
});

Folgen Sie einfach den folgenden Schritten: 

  1. öffnen http://jsfiddle.net/
  2. geben Sie etwas in HTML, CSS oder Javascript ein
  3. versuchen Sie, die Registerkarte in Chrom zu schließen

Es sollte folgendes Bild zeigen:

enter image description here

10
Khamidulla

Hallo, ich habe eine knifflige Lösung bekommen, die nur mit neuen Browsern funktioniert:

Öffnen Sie einfach ein Websocket für Ihren Server. Wenn der Benutzer das Fenster schließt, wird das Ereignis onclose ausgelöst

6
wutzebaer

Verwenden Sie die jQuery-.bind-Methode, wie Phoenix bereits gesagt hat. Für mehr Browser-Kompatibilität sollten Sie jedoch einen String zurückgeben.

$(document).ready(function()
{
    $(window).bind("beforeunload", function() { 
        return "Do you really want to close?"; 
    });
});

weitere Details finden Sie unter: developer.mozilla.org

3
Macondo

Das folgende Skript gibt eine Nachricht auf Chrome und IE:

<script>
window.onbeforeunload = function (e) {
// Your logic to prepare for 'Stay on this Page' goes here 

    return "Please click 'Stay on this Page' and we will give you candy";
};
</script>

Chrom
enter image description here

IE
enter image description here

unter Firefox erhalten Sie eine allgemeine Nachricht

enter image description here

Der Mechanismus ist synchron, sodass keine Serveraufrufe zum Verzögern funktionieren. Sie können jedoch einen Mechanismus wie ein modales Fenster vorbereiten, der angezeigt wird, wenn der Benutzer sich entscheidet, auf der Seite zu bleiben, ohne ihn jedoch daran zu hindern, die Seite zu verlassen.

Antwort auf Frage im Kommentar

F5 wird das Ereignis erneut auslösen, so wird es auch Atl+F4.

3

Vielleicht ist es besser, die Pfaderkennungsmaus zu verwenden.

In BrowserClosureNotice haben Sie ein Demo-Beispiel und eine reine Javascript-Bibliothek, um dies zu tun.

Es ist nicht perfekt, aber vermeiden Sie Probleme mit Dokument- oder Mausereignissen ...

0
manufosela
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

<script type="text/javascript" language="javascript">

var validNavigation = false;

function endSession() {
// Browser or broswer tab is closed
// Do sth here ...
alert("bye");
}

function wireUpEvents() {
/*
* For a list of events that triggers onbeforeunload on IE
* check http://msdn.Microsoft.com/en-us/library/ms536907(VS.85).aspx
*/
window.onbeforeunload = function() {
  if (!validNavigation) {

            var ref="load";
      $.ajax({
            type: 'get',
            async: false,
            url: 'logout.php',
 data:
            {
                ref:ref               
            },
             success:function(data)
            {
                console.log(data);
            }
            });
     endSession();
  }
 }

// Attach the event keypress to exclude the F5 refresh
$(document).bind('keypress', function(e) {
if (e.keyCode == 116){
  validNavigation = true;
}
});

// Attach the event click for all links in the page
$("a").bind("click", function() {
validNavigation = true;
});

 // Attach the event submit for all forms in the page
 $("form").bind("submit", function() {
 validNavigation = true;
 });

 // Attach the event click for all inputs in the page
 $("input[type=submit]").bind("click", function() {
 validNavigation = true;
 });

}

// Wire up the events as soon as the DOM tree is ready
$(document).ready(function() {
wireUpEvents();  
}); 
</script> 

Dies wird verwendet, wenn der angemeldete Benutzer den Browser oder die Registerkarte des Browsers schließt, er wird automatisch das Benutzerkonto abgemeldet ...

0
ramesh kanna
<script type="text/javascript">
window.addEventListener("beforeunload", function (e) {

  var confirmationMessage = "Are you sure you want to leave this page without placing the order ?";
  (e || window.event).returnValue = confirmationMessage;
  return confirmationMessage;

});
</script>

Bitte probieren Sie diesen Code aus, das funktioniert gut für mich. Diese benutzerdefinierte Nachricht wird im Chrome-Browser angezeigt. In Mozilla wird diese Nachricht jedoch nicht angezeigt.

0
user2753425

jQuery . bind () ist veraltet. Verwenden Sie stattdessen . On ()

$(window).on("beforeunload", function() {
    runBeforeClose();
});
0
ow3n