2012年1月9日 星期一

取得使用者關閉IE訊息,並做登出

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的部分則已經無法限制視窗是否關閉,因為它已經開始關閉視窗了。


原始文章出自於此


沒有留言:

張貼留言