Ich habe viele Methoden ausprobiert, um ein Ereignis zum Schließen des Browsers über jQuery oder JavaScript zu erkennen. Leider konnte ich den Abschluss nicht erkennen. Die onbeforeunload
und onunload
Methoden funktionieren auch nicht.
Wie erkenne ich das Fenster close
, unload
oder beforeunload
Ereignisse?
javascript
jquery
browser
vjeta
quelle
quelle
$(window).unload(function(){var e=confirm("Are you sure you want to exit?");if(e){}})
Antworten:
Haben Sie 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 Aufforderungen beim Klicken auf
#lnkLogOut
und.btn
Elemente zu vermeiden .Eine weitere Sache: Die benutzerdefinierte Eingabeaufforderung funktioniert in Firefox nicht (auch nicht in der neuesten Version). Weitere Details dazu finden Sie in diesem Thread.
quelle
Unter Bezugnahme auf verschiedene Artikel und einige Testversuche habe ich schließlich diese Idee entwickelt, die perfekt für mich funktioniert.
Die Idee war, 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-Standardnachricht aus, falls die Nachricht angepasst werden muss, und gibt dann den anzuzeigenden Text anstelle einer leeren Zeichenfolge in der Funktion ConfirmLeave () zurück .
quelle
Versuchen Sie, den folgenden Code für mich unter 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?"); }); });
Befolgen Sie für einfache folgende Schritte:
Es sollte folgendes Bild zeigen:
quelle
Hallo, ich habe eine knifflige Lösung, die nur mit neuen Browsern funktioniert:
Öffnen Sie einfach einen Websocket für Ihren Server. Wenn der Benutzer das Fenster schließt, wird das Ereignis onclose ausgelöst
quelle
Das folgende Skript gibt eine Nachricht in Chrome und IE aus:
<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
IE
In Firefox erhalten Sie eine allgemeine Nachricht
Der Mechanismus ist synchron, sodass keine Serveraufrufe zur Verzögerung funktionieren. Sie können dennoch einen Mechanismus wie das modale Fenster vorbereiten, der angezeigt wird, wenn der Benutzer auf der Seite bleibt, aber keine Möglichkeit, ihn am Verlassen zu hindern.
Antwort auf Frage im Kommentar
F5wird das Ereignis erneut auslösen, ebenso Atl+ F4.
quelle
Wie Phoenix sagte, verwenden Sie die jQuery .bind-Methode, aber für mehr Browserkompatibilität sollten Sie 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
quelle
jQuery .bind () ist veraltet. Verwenden Sie stattdessen .on ()
$(window).on("beforeunload", function() { runBeforeClose(); });
quelle
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 ...
quelle
<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 versuchen Sie diesen Code, das funktioniert gut für mich. Diese benutzerdefinierte Nachricht kommt in den Chrome-Browser, aber in Mozilla wird diese Nachricht nicht angezeigt.
quelle
<!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 Browser-Registerkarte schließt und das Benutzerkonto automatisch abmeldet ...
quelle
Sie können so etwas versuchen.
<html> <head> <title>test</title> <script> function openChecking(){ // alert("open"); var width = Number(screen.width-(screen.width*0.25)); var height = Number(screen.height-(screen.height*0.25)); var leftscr = Number((screen.width/2)-(width/2)); // center the window var topscr = Number((screen.height/2)-(height/2)); var url = ""; var title = 'popup'; var properties = 'width='+width+', height='+height+', top='+topscr+', left='+leftscr; var popup = window.open(url, title, properties); var crono = window.setInterval(function() { if (popup.closed !== false) { // !== opera compatibility reasons window.clearInterval(crono); checkClosed(); } }, 250); //we check if the window is closed every 1/4 second } function checkClosed(){ alert("closed!!"); // do something } </script> </head> <body> <button onclick="openChecking()">Click Me</button> </body> </html>
Wenn der Benutzer das Fenster schließt, wird der Rückruf ausgelöst.
quelle