Dieser Artikel enthält einige vom Herausgeber zusammengefasste Kerninhalte. Ich persönlich denke, dass er für alle hilfreich sein wird. Den spezifischen Inhalt finden Sie unten:
Onload wird nur ausgeführt, wenn die Seite geladen wird
Führen Sie onunload
nur aus, wenn die Seite geschlossen ist
Wenn die Seite aktualisiert wird, wird zuerst onbeforeunload, dann onunload und schließlich onload ausgeführt.
Nach der Überprüfung kam ich zu dem Schluss:
//Für IE, Google, 360:
//Onload wird nur ausgeführt, wenn die Seite geladen wird
// Wenn die Seite aktualisiert wird, wird das Ereignis onbeforeunload vor der Aktualisierung ausgeführt, das Ereignis onunload wird ausgeführt, wenn die neue Seite die alte Seite ersetzen soll, und schließlich wird das Ereignis onload ausgeführt.
//Wenn die Seite geschlossen wird, tritt zuerst das Ereignis onbeforeunload und dann das Ereignis onunload auf.
//Für Firefox:
//Wenn die Seite aktualisiert wird, wird nur das Ereignis „onunload“ ausgeführt; wenn die Seite geschlossen wird, wird nur das Ereignis „onbeforeunload“ ausgeführt
Zurück zum Thema: Wie kann festgestellt werden, ob der Browser geschlossen oder aktualisiert ist? Ich habe es hunderte Male nach verschiedenen Meinungen im Internet versucht, ohne Erfolg. Die verschiedenen Meinungen sind wie folgt:
window.onbeforeunload = function() //author: meizz { var n = window.event.screenX - window.screenLeft; var b = n > document.documentElement.scrollWidth-20; if(b && window.event.clientY < 0 || window.event.altKey) { alert("是关闭而非刷新"); window.event.returnValue = ""; //这里可以放置你想做的操作代码 }else { alert("是刷新而非关闭"); } } window.onbeforeunload = function() //author: meizz { var n = window.event.screenX - window.screenLeft; var b = n > document.documentElement.scrollWidth-20; if(b && window.event.clientY < 0 || window.event.altKey) { alert("是关闭而非刷新"); window.event.returnValue = ""; //这里可以放置你想做的操作代码 }else { alert("是刷新而非关闭"); } }
und
function CloseOpen(event) { if(event.clientX<=0 && event.clientY<0) { alert("关闭"); } else { alert("刷新或离开"); } } </script> <body onunload="CloseOpen(event)">
........................
Keine dieser Methoden hat funktioniert, aber ich habe nicht aufgegeben, nachgedacht und nachgedacht...
Daraufhin bin ich zu dem Schluss gekommen,
//Für IE, Google, 360:
//Onload wird nur ausgeführt, wenn die Seite geladen wird
// Wenn die Seite aktualisiert wird, wird das Ereignis onbeforeunload vor der Aktualisierung ausgeführt, das Ereignis onunload wird ausgeführt, wenn die neue Seite die alte Seite ersetzen soll, und schließlich wird das Ereignis onload ausgeführt.
//Wenn die Seite geschlossen wird, tritt zuerst das Ereignis onbeforeunload und dann das Ereignis onunload auf.
//Für Firefox:
//Wenn die Seite aktualisiert wird, wird nur das Ereignis „onunload“ ausgeführt; wenn die Seite geschlossen wird, wird nur das Ereignis „onbeforeunload“ ausgeführt
Beim Aktualisieren zuerst onbeforeunload und dann die Serveranforderungsdaten abrufen. Wenn die neue Seite die alte Seite ersetzen soll, tritt beim Schließen der Seite zuerst das onbeforeunload-Ereignis und dann sofort das onunload-Ereignis auf. Dann ist beim Aktualisieren die Zeit zwischen onbeforeunload und onunload definitiv länger als beim Schließen, und das ist nach dem Testen tatsächlich der Fall.
Meinen Testcode gepostet:
var _beforeUnload_time = 0, _gap_time = 0; var is_fireFox = navigator.userAgent.indexOf("Firefox")>-1;//是否是火狐浏览器 window.onunload = function (){ _gap_time = new Date().getTime() - _beforeUnload_time; if(_gap_time <= 5) $.post(pathName+"/back/bi!aaaa.s2?t="+_beforeUnload_time,{msg:"浏览器关闭",time:_gap_time},function(json){},"text"); else $.post(pathName+"/back/bi!aaaa.s2?t="+_beforeUnload_time,{msg:"浏览器刷新",time:_gap_time},function(json){},"text"); } window.onbeforeunload = function (){ _beforeUnload_time = new Date().getTime(); if(is_fireFox)//火狐关闭执行 $.post(pathName+"/back/bi!aaaa.s2?t="+_beforeUnload_time,{msg:"火狐关闭"},function(json){},"text"); };
Servercode (SSH-Implementierung):
public void aaaa(){ System.out.println(base.getParameter("msg")+",间隔:"+base.getParameter("time")); }
Für if(_gap_time <= 5) ist die 5 hier meine Standardeinstellung, die vom Client-Browser abhängt und auch mit der Maschinenkonfiguration des Clients zusammenhängt. Wenn mein Computer den Browser schließt, ist das onbeforeunload-Ereignis dasselbe wie Das Datenintervall des Onunload-Ereignisses überschreitet nicht 2 ms und das Intervall während der Aktualisierung ist 100 % größer als 2 ms, da auf den Server zugegriffen werden muss. Meine Testergebnisse sind unten aufgeführt:
Im Folgenden wird der Browser vorgestellt, um das Hörereignis zu schließen und zu bestimmen, ob er aktualisiert oder geschlossen werden soll
Mit onunload oder onbeforeunload kann das Browser-Schließereignis überwacht werden, es kann jedoch nicht zwischen Schließen und Aktualisieren unterschieden werden. Der folgende js-Code kann das Schließen des Browsers teilweise überwachen!
//鼠标相对于用户屏幕的水平位置 - 窗口左上角相对于屏幕左上角的水平位置 = 鼠标在当前窗口上的水平位置 var n = window.event.screenX - window.screenLeft; //鼠标在当前窗口内时,n<m,b为false;鼠标在当前窗口外时,n>m,b为true。20这个值是指关闭按钮的宽度 var b = n > document.documentElement.scrollWidth-20; //鼠标在客户区内时,window.event.clientY>0;鼠标在客户区外时,window.event.clientY<0 if(b && window.event.clientY < 0 || window.event.altKey || window.event.ctrlKey){ 关闭浏览器时你想做的事 }else if(event.clientY > document.body.clientHeight || event.altKey){ 关闭浏览器时你想做的事 }
Dieser Teil von js kann den Mausklick auf die Schaltfläche zum Schließen des Browsers, den rechten Mausklick auf die Statusleiste des Browsers zum Schließen des Popup-Menüs und verschiedene Tastenkombinationen überwachen. Das Doppelklicken auf das Symbol in der oberen Ecke des Browsers zum Schließen des Browsers und zum Schließen der Registerkarte kann jedoch nicht überwacht werden.
Das Obige ist der gesamte Inhalt dieses Artikels. Wenn er nicht gut geschrieben ist, teilen Sie mir bitte Ihre wertvolle Meinung mit.