Heim > Web-Frontend > js-Tutorial > Bestimmen Sie anhand Ihrer JavaScript-Kenntnisse, ob der Browser geschlossen oder aktualisiert wird

Bestimmen Sie anhand Ihrer JavaScript-Kenntnisse, ob der Browser geschlossen oder aktualisiert wird

WBOY
Freigeben: 2016-05-16 15:16:52
Original
2983 Leute haben es durchsucht

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("是刷新而非关闭"); 
} 
}
Nach dem Login kopieren

und

function CloseOpen(event) {
if(event.clientX<=0 && event.clientY<0) {
alert("关闭");
}
else
{
alert("刷新或离开");
}
}
</script>
<body onunload="CloseOpen(event)">
Nach dem Login kopieren

........................

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&#63;t="+_beforeUnload_time,{msg:"浏览器关闭",time:_gap_time},function(json){},"text");
else 
$.post(pathName+"/back/bi!aaaa.s2&#63;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&#63;t="+_beforeUnload_time,{msg:"火狐关闭"},function(json){},"text");
};
Nach dem Login kopieren

Servercode (SSH-Implementierung):

public void aaaa(){
System.out.println(base.getParameter("msg")+",间隔:"+base.getParameter("time"));
}
Nach dem Login kopieren

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){
关闭浏览器时你想做的事
}
Nach dem Login kopieren

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.

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage