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.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 Javascript
小议Javascript中的this指针
Mar 18 Javascript
js实现页面转发功能示例代码
Aug 05 Javascript
使用jquery组件qrcode生成二维码及应用指南
Feb 22 Javascript
jQuery使用$.each遍历json数组的简单实现方法
Apr 18 Javascript
原生js的数组除重复简单实例
May 24 Javascript
javascript中Number的方法小结
Nov 21 Javascript
简单实现js拖拽效果
Jul 25 Javascript
基于vue 动态加载图片src的解决方法
Feb 05 Javascript
微信小程序实现日历功能
Nov 27 Javascript
vue下载二进制流图片操作
Oct 26 Javascript
vue打开其他项目页面并传入数据详解
Nov 25 Vue.js
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
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
用python写asp详细讲解
2013/12/16 Python
Python中列表(list)操作方法汇总
2014/08/18 Python
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
Python合并多个装饰器小技巧
2015/04/28 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
python的turtle库使用详解
2019/05/10 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
Opencv求取连通区域重心实例
2020/06/04 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
瑞士国际航空官网:SWISS
2016/07/21 全球购物
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
法制宣传日活动总结
2014/04/29 职场文书
幼师辞职信怎么写
2015/02/27 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
Pytorch 如何实现常用正则化
2021/05/27 Python
logback如何自定义日志存储
2021/08/30 Java/Android
Java字符串逆序方法详情
2022/03/21 Java/Android