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


Posted in Javascript onJanuary 23, 2010

事件的起因是由于在工作中有客户反映,常常会有用户在浏览网页的过程中订购了商品,但是由于用户一下子打开的窗口过多,又或者在敲打键盘时,错误地按到了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>this is id onbeforunload event test</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,如果我的代码不能在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,表示用户是正常退出,这样自然不会弹出对话框了。
再测试一下,正常了,对,这就是我想要的结果!
本篇文章源于从Brandon Himes处而得,并且还是从google快照,源文链接已找不到,本来想翻译的,但是本人水平实在有限,看得懂而已,如果翻译得不好反而招骂,如果朋友们想看源文,请直接点击这里,这是快照地址,可能一段时间后就不存在了。
Javascript 相关文章推荐
解析Jquery的LigerUI如何实现文件上传
Jul 09 Javascript
网页前端优化之滚动延时加载图片示例
Jul 13 Javascript
JavaScript 和 Java 的区别浅析
Jul 31 Javascript
七夕情人节丘比特射箭小游戏
Aug 20 Javascript
js文字横向滚动特效
Nov 11 Javascript
AngularJs中route的使用方法和配置
Feb 04 Javascript
jquery ztree实现模糊搜索功能
Feb 25 Javascript
js关于getImageData跨域问题的解决方法
Oct 14 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
Aug 31 Javascript
angular4+百分比进度显示插件用法示例
May 05 Javascript
javascript实现获取中文汉字拼音首字母
May 19 Javascript
js+css3实现炫酷时钟
Aug 18 Javascript
JQuery 1.4 中的Ajax问题
Jan 23 #Javascript
用JS写的一个TableView控件代码
Jan 23 #Javascript
JQuery 操作Javascript对象和数组的工具函数小结
Jan 22 #Javascript
JavaScript 学习笔记(十四) 正则表达式
Jan 22 #Javascript
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
Jan 22 #Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
Jan 22 #Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
Jan 22 #Javascript
You might like
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
Snoopy类使用小例子
2008/04/15 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
php实现源代码加密的方法
2015/07/11 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
Python操作Access数据库基本步骤分析
2016/09/19 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
详解KMP算法以及python如何实现
2020/09/18 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
最新销售员个人自荐信
2013/09/21 职场文书
外贸业务员岗位职责
2013/11/24 职场文书
自我评价格式
2014/01/06 职场文书
班主任先进事迹材料
2014/12/17 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL