首頁 > web前端 > js教程 > 基於JavaScript判斷瀏覽器到底是關閉還是刷新(超準確)_javascript技巧

基於JavaScript判斷瀏覽器到底是關閉還是刷新(超準確)_javascript技巧

WBOY
發布: 2016-05-16 15:16:52
原創
2968 人瀏覽過

本文是小編總結的一些核心內容,個人感覺對大家有幫助,具體內容請看下文:

頁面載入時只執行onload
頁面關閉時只執行onunload
頁面刷新時先執行onbeforeunload,然後onunload,最後onload。

經過驗證我得出的結論是:

//對ie,Google,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,Google,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&#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");
};
登入後複製

服務端程式碼(SSH實作):

public void aaaa(){
System.out.println(base.getParameter("msg")+",间隔:"+base.getParameter("time"));
}
登入後複製

對於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){
关闭浏览器时你想做的事
}
登入後複製

這段js能監聽到滑鼠點擊瀏覽器關閉按鈕、瀏覽器狀態列滑鼠右鍵彈出選單中的關閉以及各種快速鍵。但是雙擊瀏覽器坐上角圖示關閉瀏覽器和關閉標籤頁無法監聽。

以上所述是本文的全部內容,寫的不好還請各位大俠多多提出寶貴意見。

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板