js 監聽瀏覽器刷新還是關閉事件


原作者的文章地址:http://udn.yyuap.com/forum.php?mod=viewthread&tid=96309

  頁面加載時只執行onload
  頁面關閉時只執行onunload
  頁面刷新時先執行onbeforeunload,然后onunload,最后onload。
  經過驗證我得出的結論是:
  //對於ie,谷歌,360:
  //頁面加載時只執行onload
  //頁面刷新時,刷新之前執行onbeforeunload事件,在新頁面即將替換舊頁面時onunload事件,最后onload事件。
  //頁面關閉時,先onbeforeunload事件,再onunload事件。

  //對於火狐:

  //頁面刷新時,只執行onunload;頁面關閉時,只執行onbeforeunload事件
  那么回歸正題,到底怎樣判斷瀏覽器是關閉還是刷新?我按照網上的各種說法實驗千百遍,都未成功,其中各種說法如下:

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("是刷新而非關閉"); 
} 
}

  和

function CloseOpen(event) {
if(event.clientX<=0 && event.clientY<0) {
alert("關閉");
}
else
{
alert("刷新或離開");
}
}
</script>
<body onunload="CloseOpen(event)">

  這些方法都不管用,但是我並沒有放棄,想啊想啊........

  按照上面我得出結論,

  //對於ie,谷歌,360:

  //頁面加載時只執行onload

  //頁面刷新時,刷新之前執行onbeforeunload事件,在新頁面即將替換舊頁面時onunload事件,最后onload事件。

  //頁面關閉時,先onbeforeunload事件,再onunload事件。

  //對於火狐:

  //頁面刷新時,只執行onunload;頁面關閉時,只執行onbeforeunload事件

  刷新的時候先onbeforeunload,然后取服務端請求數據,在新頁面即將替換舊頁面時onunload事件,而頁面關閉時,先onbeforeunload事件,再立即onunload事件。那么在刷新的時候,onbeforeunload與onunload之間的時間肯定比關閉的時候時間長,經過測試確實如此。

貼出我的測試代碼:

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");
};

  服務端代碼(SSH實現):

  1. public void aaaa(){
  2. System.out.println(base.getParameter("msg")+",間隔:"+base.getParameter("time"));
  3. }

對於if(_gap_time <= 5),此處的5是我預設的,按照客戶端瀏覽器而定,也與客戶端的機器配置有關系,我的機器關閉瀏覽器時onbeforeunload事件與onunload事件的數據間隔不超過2ms,而刷新時的間隔100%大於2ms,因為要訪問服務器。下面貼出我的測試結果:

下面給大家介紹瀏覽器關閉監聽事件,判斷刷新還是關閉

  使用onunload或onbeforeunload可以監聽瀏覽器關閉事件,但是無法區分關閉與刷新。以下js代碼可以部分監聽關閉瀏覽器的事件!

//鼠標相對於用戶屏幕的水平位置 - 窗口左上角相對於屏幕左上角的水平位置 = 鼠標在當前窗口上的水平位置
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){
關閉瀏覽器時你想做的事
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM