Tentukan sama ada penyemak imbas ditutup atau dimuat semula berdasarkan kemahiran JavaScript (sangat tepat)_javascript

WBOY
Lepaskan: 2016-05-16 15:16:52
asal
2945 orang telah melayarinya

Artikel ini ialah beberapa kandungan teras yang diringkaskan oleh editor Saya secara peribadi berpendapat ia akan membantu semua orang Sila lihat di bawah untuk kandungan khusus:

Onload hanya dilaksanakan apabila halaman dimuatkan
Hanya jalankan onunload
apabila halaman ditutup Apabila halaman dimuat semula, onbeforeunload dilaksanakan dahulu, kemudian onunload, dan akhirnya onload.

Selepas pengesahan, saya sampai pada kesimpulan:

//Untuk IE, Google, 360:

//Onload hanya dilaksanakan apabila halaman dimuatkan
//Apabila halaman dimuat semula, acara onbeforeunload dilaksanakan sebelum muat semula, acara onunload dilaksanakan apabila halaman baharu akan menggantikan halaman lama, dan akhirnya acara onload dilaksanakan.
//Apabila halaman ditutup, peristiwa onbeforeunload berlaku dahulu, dan kemudian peristiwa onunload.

//Untuk Firefox:

//Apabila halaman dimuat semula, hanya onunload dilaksanakan; Jadi kembali kepada topik, bagaimana untuk menentukan sama ada penyemak imbas ditutup atau dimuat semula? Saya telah mencuba ratusan kali mengikut pelbagai pendapat di Internet tidak berjaya. Pelbagai pendapat adalah seperti berikut:

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("是刷新而非关闭"); 
} 
}
Salin selepas log masuk
dan

function CloseOpen(event) {
if(event.clientX<=0 && event.clientY<0) {
alert("关闭");
}
else
{
alert("刷新或离开");
}
}
</script>
<body onunload="CloseOpen(event)">
Salin selepas log masuk
........................

Tiada kaedah ini berkesan, tetapi saya tidak berputus asa, berfikir dan berfikir...


Menurut perkara di atas saya sampai pada kesimpulan,

//Untuk IE, Google, 360:

//Onload hanya dilaksanakan apabila halaman dimuatkan

//Apabila halaman dimuat semula, acara onbeforeunload dilaksanakan sebelum muat semula, acara onunload dilaksanakan apabila halaman baharu akan menggantikan halaman lama, dan akhirnya acara onload dilaksanakan.
//Apabila halaman ditutup, peristiwa onbeforeunload berlaku dahulu, dan kemudian peristiwa onunload.

//Untuk Firefox:

//Apabila halaman dimuat semula, hanya onunload dilaksanakan; Apabila menyegarkan, mula-mula onbeforeunload, dan kemudian dapatkan data permintaan pelayan Apabila halaman baharu akan menggantikan halaman lama, peristiwa onunload berlaku Apabila halaman ditutup, peristiwa onbeforeunload berlaku dahulu, dan kemudian acara onunload dengan serta-merta. Kemudian apabila menyegarkan, masa antara onbeforeunload dan onunload pasti lebih lama daripada semasa menutup, dan ini memang berlaku selepas ujian.


Menyiarkan kod ujian saya:

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");
};
Salin selepas log masuk
Kod pelayan (pelaksanaan SSH):

public void aaaa(){
System.out.println(base.getParameter("msg")+",间隔:"+base.getParameter("time"));
}
Salin selepas log masuk
Untuk if(_gap_time <= 5), 5 di sini ialah lalai saya, yang bergantung pada penyemak imbas klien dan juga berkaitan dengan konfigurasi mesin klien Apabila mesin saya menutup penyemak imbas, acara onbeforeunload adalah sama seperti Selang data peristiwa beban beban tidak melebihi 2ms dan selang semasa muat semula adalah 100% lebih besar daripada 2ms kerana pelayan perlu diakses. Keputusan ujian saya dipaparkan di bawah:

Yang berikut akan memperkenalkan penyemak imbas untuk menutup acara mendengar dan menentukan sama ada untuk memuat semula atau menutup Menggunakan onunload atau onbeforeunload boleh memantau acara penutupan penyemak imbas, tetapi ia tidak dapat membezakan antara menutup dan menyegarkan. Kod js berikut boleh memantau sebahagian acara penutupan penyemak imbas!

//鼠标相对于用户屏幕的水平位置 - 窗口左上角相对于屏幕左上角的水平位置 = 鼠标在当前窗口上的水平位置
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){
关闭浏览器时你想做的事
}
Salin selepas log masuk
Sekeping js ini boleh memantau klik tetikus pada butang tutup penyemak imbas, klik kanan tetikus pada bar status penyemak imbas untuk menutup menu pop timbul, dan pelbagai kekunci pintasan. Walau bagaimanapun, mengklik dua kali ikon di penjuru atas penyemak imbas untuk menutup penyemak imbas dan menutup tab tidak boleh dipantau.

Di atas adalah keseluruhan kandungan artikel ini Jika ia tidak ditulis dengan baik, sila berikan saya pendapat anda yang berharga.

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan