javascript判斷視窗關閉事件

來源:互聯網
上載者:User
<script language=javascript>
function window.onbeforeunload()
{
if(event.clientX>document.body.clientWidth&&event.clientY<0||event.altKey||event.ctrlKey)
{
//判斷event.altKey是為了Alt+F4關閉的情況;判斷event.ctrlKey是為了Ctrl+W關閉的情況
//document.body.clientWidth不包括捲軸,而關閉按鈕恰好在捲軸右側。
window.event.returnValue="";
}
}
</script>

1、瀏覽器不是軟體的視窗,要該事件非常困難,因為關閉與重新整理這兩個事件就很難區分。
2、都沒有對應的事件,只能根據一些條件來判斷,但未必準確。
3、前進、後退、重新整理、關閉都響應事件window.onbeforeunload。
4、javascript之所以能得到某些事件屬性和調用方法,是因為瀏覽器對象為他提供了介面,用COM的術語來說,是IDispatch介面,如果瀏覽器對象沒有為他提供介面,他什麼也幹不了。所以有些功能在其它語言中可以實現,而在javascript中是永遠無法實現的。

用onUnload方法
在body 標籤裡加入onUnload事件
body onUnload="myClose()"
然後在javascript裡定義myClose()方法,但是onUnload方法是在關閉視窗之後執行,不是在關閉視窗之前執行,如果你想在關閉視窗之前做判斷,請用第一種方法

function getEvent() //同時相容ie和ff的寫法, 這個方法是網上copy的  
{
if(document.all) return window.event;
func=getEvent.caller;
while(func!=null){
var arg0=func.arguments[0];
if(arg0)
{
if((arg0.constructor==Event || arg0.constructor ==MouseEvent)
                || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)) 
{
return arg0;
}
}
func=func.caller;
}
return null;
}

function ConfirmClose(){
if(window.event){
window.event.returnValue = "在關閉視窗前確認您是否已經儲存了資訊!";
     }else{
getEvent().preventDefault();//for firefox
   }
}

function on_page_loaded(){//自己定義的body的onload事件
try{
if(!window.onbeforeunload){ //為了不覆蓋原來的onbeforeunload方法,先判斷
window.onbeforeunload = ConfirmClose; //todo 增加了視窗關閉前的提示
}
}catch(e){}
}
<body onload="on_page_loaded()">

 

//開啟表單應先判斷父表單是否關閉

function rsSeek(){
if(opener){
if(typeof(window.opener.document)=='unknown' ||typeof(window.opener.document) == 'undefined'){
//已關閉
}else{
opener.MySeekOk();
}
}
}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.