var isAltF4 = false;
//用來判斷是否按下[X]
var isXClose = false;
window.onbeforeunload = bunload;
function bunload()
{
if (event.clientY < 0 || isAltF4 )
{
mess = "確定離開?";
//代表是真的按下[X]
isXClose = true;
return mess;
}
}
function document.onkeydown(){
if ((window.event.altKey)&&(window.event.keyCode==115))
{
isAltF4 = true;
bunload();
}
else
{
isAltF4 = false;
}
}
//真的關閉時,要觸發logoutUser
window.onunload = logoutUser;
function logoutUser()
{
//多判斷是不是按下[X]關閉,是的話才做登出
if (isXClose)
{
try
{
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST","Logout.aspx", false);
xmlhttp.send();
return true;
}
catch(e)
{
alert('delete user account error message:' + e.message);
}
}
}
多抓onunload事件,並進行登出動作,這邊我用了一個變數isXClose來判斷是否按下[X],在這邊不使用if (event.clientY < 0 || isAltF4 )來判斷的原因是在這個事件中,抓到的event.clientY已經與bunload中不同了,無法使用這樣的做法,因此我就多做了一道功夫來完成。
這個範例可以work的重點在於beforeonunload事件與onunload這兩個事件的順序與觸發原則,我們在beforeonunload這個事件是視窗卸載前的事件,在這邊可以決定是否觸發onunload的視窗關閉事件,但在onunload的部分則已經無法限制視窗是否關閉,因為它已經開始關閉視窗了。
原始文章出自於此
沒有留言:
張貼留言