網路上很多文章教的都是只能用在IE上,
為了跨瀏覽器, 後來設計了這個方法
想法是把所有會觸發換頁的動作都控制下來
把以下的動作定義為正常的瀏覽, 並應該是停留在原網站內
1. 滑鼠點擊網頁內的元件 (在我的case中沒有任何的外部連結, 有的話也是新開分頁)
2. 按下Enter, F5
3. 非以上的情況都視為是離開網站
4. 以上可視自己網站的需求增加, 另外有任何系統自動化換頁功能時, 需要在換頁前呼叫userEvent
實作 userEvent
var isUserEvent = false;
function userEvent(){
isUserEvent = true;
//在觸發userEvent後, 1秒後就將flag清除, 時間設太短有時候網站反應慢一點會誤判
setTimeout("isUserEvent =false;",1000);
}
1. 滑鼠點擊事件
//用onmousedown的話會遇到使用者按太久沒放開結果isUserEvent又被設為false document.onmouseup = userEvent;
2. 按下Enter, F5
實作 keyDown
document.onkeydown = keyDown;
function keyDown(e) {
if (!e) var e = window.event;
var key = window.event ? e.keyCode : e.which;
//Enter: 13, F5: 116
if(key == 13 || key == 116)
userEvent();
}
3. 實作 logout
window.onunload = logoutUser;
function logoutUser() {
// 判斷是離開網站的操作, 並且使用者已經登入, 就幫他做登出的動作
// 怕誤判的話可以詢問使用者是否要登出
if (!isUserEvent && isLogin && confirm('logout?')) {
try {
var xmlhttp = null;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); //later IE
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); //earlier IE
} catch (e) {
xmlhttp = null;
}
}
if (xmlhttp==null)
{
xmlhttp=new XMLHttpRequest() //IE7, Firefox, Safari
}
//用ajax呼叫登出使用者的api
xmlhttp.open("POST","/LoginManager.do?opt=logout", false);
xmlhttp.send();
return true;
} catch(e) {
}
}
}