解决window.onbeforeunload在IE下无法正常工作

发布时间:2019-11-22编辑:脚本学堂
在js中使用window.onbeforeunload方法,则不管用户是点击了关闭,或在任务栏关闭、点击后退、刷新、按F5键,都可以检测到用户即将离开的消息。

以下代码可以做到不管用户是点击了关闭,或在任务栏关闭、点击后退、刷新、按F5键,都可以检测到用户即将离开的消息。
代码:
 

复制代码 代码示例:
<script type="text/javascript" language="javascript">
function bindunbeforunload()
{
window.onbeforeunload=perforresult;
}
function unbindunbeforunload()
{
window.onbeforeunload=null;
}
function perforresult()
{
return"当前操作未保存,如果你此时离开,所做操作信息将全部丢失,是否离开?";
}
</script>

只需要将bindunbeforunload()方法注册到要检测的页面上即可,可以在body的onload或者document.ready中注册这个方法,在这里采用window.onbeforeunload,即是在页面即将卸载之前弹出提示框。

测试代码:
 

复制代码 代码示例:
<html>
<head><title>检测window.onbeforeunload事件的用法-www.jb200.com</title>
</head>
<script type="text/javascript" language="javascript">
function bindunbeforunload()
{
window.onbeforeunload=perforresult;
}
function unbindunbeforunload()
{
window.onbeforeunload=null;
}
function perforresult()
{
return"当前操作未保存,如果你此时离开,所做操作信息将全部丢失,是否离开?";
}
</script>
<body onload="javascript:return bindunbeforunload();">
<h1>test is start</h1>
<input type="button" value="绑定事件" id="btnBind" onclick="return biindunbeforunload();"/>
<input type="button" value="删除绑定事件" id="btnUnBind" onclick="unbiindunbeforunload();"/>
</body>
</html>
 

现在刷新页面,弹出期望中的对话框
但是当在IE下打开上述代码时,我的“删除事件绑定按钮”没有发挥作用,国内3分之2的用户都在使用IE,特别是在使用该死的IE6、7。

利用一个全局变量来控制是否弹出对话框,修改后的"javascript"代码如下:
 

复制代码 代码示例:
<script type="text/javascript" language="javascript">
var goodexit=false;
function bindunbeforunload()
{
goodexit=false;
window.onbeforeunload=perforresult;
}
function unbindunbeforunload()
{
goodexit=true;
window.onbeforeunload=null;
}
function perforresult()
{
if(!goodexit)
{
return"当前操作未保存,如果你此时离开,所做操作信息将全部丢失,是否离开?";
}
}
</script>

同时调用删除绑定事件时,将变量goodexit的值更改为:true,表示用户是正常退出,这样自然不会弹出对话框了。
再测试一下,正常了。