当前位置: 代码迷 >> Web前端 >> 监听浏览器的封锁事件
  详细解决方案

监听浏览器的封锁事件

热度:94   发布时间:2012-08-26 16:48:06.0
监听浏览器的关闭事件

在用户点击浏览器关闭按钮时需要给出提示,确认退出时就需要监听浏览器的关闭事件了,

?

Onunload与Onbeforeunload
Onunload,onbeforeunload都是在刷新或关闭时调用,可以 在<script>脚本中通过window.onunload来指定或者在<body>里指定。区别在于 onbeforeunload在onunload之前执行,它还可以阻止onunload的执行。
Onbeforeunload也是在页面刷新或关闭时调用,Onbeforeunload是正要去服务器读 取新的页面时调用,此时还没开始读取;而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。Onunload是无 法阻止页面的更新和关闭的。而 Onbeforeunload 可以做到。曾经做一个考试系统,涉及到防止用户半途退出考试(有意或者无意),代码如下:
<script type="text/javascript">   
<!--     
    window.onbeforeunload = onbeforeunload_handler;   
    window.onunload = onunload_handler;   
    function onbeforeunload_handler(){   
        var warning="确认退出?";           
        return warning;   
    }   
       
    function onunload_handler(){   
        var warning="谢谢光临";   
        alert(warning);   
    }   
// -->   
</script>   
?

在用户确定关闭窗体后,页面中有一个表单需要提交,但是发现当表单提交时又会触发 window.onbeforeunload事件,也就是说当关闭窗口和提交表单时会弹出两次相同的提示信息,所以代码调整如下:

JavaScript代码:

<script type="text/javascript">      
<!--   
      
    var MSG_UNLOAD="内容没有保存,是否确认关闭窗口!";
    var UnloadConfirm = {};
    UnloadConfirm.set = function(confirm_msg){
    window.onbeforeunload = function(event){	
    event = event || window.event;	
    event.returnValue = confirm_msg;	
    }
       }
    UnloadConfirm.clear = function(){
    	window.onbeforeunload = function(){};
    }                    
    function onunload_handler(){      
        UnloadConfirm.clear();
        document.forms[0].submit();  
    }  
    function closeWin(){
    	window.close();
    } 
    
    function initPage(){
          UnloadConfirm.set(MSG_UNLOAD);
	 		 
     }
     initPage();
     window.onunload = onunload_handler;
// -->      
</script> 
?
  相关解决方案