onunload、onbeforeunload事件兼容问题详解
2015-09-21 09:49
405 查看
最近项目中做到一个功能:在上传页面用户开始上传文件之后用户点击任意跳转都需要弹出提示层进行二次确定才允许他进行跳转,这样做的目的是为了防止用户的错误操作导致这珍贵的UGC 流失(通常用户在一次上传不成功之后,很容易就会打消了上传的念头的了,或去到其他平台进行上传)。
在这里用到的是 onbeforeunload 事件。下面就梳理下 onunload、onbeforeunload 这两个事件,也顺带说说我遇到的问题与解决方案。
onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过 window.onunload来调用。区别在于onbeforeunload在onunload之前执行,它还可 以阻止onunload的执行。
onbeforeunload 是正要去服务器读 取新的页面时调用,此时还没开始读取;而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。
IE9 刷新页面 会执行,页面跳转、关闭浏览器不能执行;
firefox(包括firefox3.6) 关闭标签之后、页面跳转之后、刷新页面之后能执行,但关闭浏览器不能执行;
Safari 刷新页面、页面跳转之后会执行,但关闭浏览器不能执行;
Opera、Chrome 任何情况都不执行。
return 的值 为你需要告诉用户的提示信息如上面demo的话浏览器的提示是这样(firefox 并不支持文字提醒):
值得注意的是,网上流传说 可以通过检查 e.clientX e.clientY 判断 用户是否点击 右上角关闭浏览器的,但是实践发现 只有 IE6,IE7,IE8 能获取得到具体数值,其他浏览器均为 undefined。
Firefox 不支持文字提醒信息
Opera 不支持
在IE6,IE7 下面 点击 里面的 a 标签,蛋疼的事情就发生了。
解决方法:
给这 a标签的 父级 添加 onclick=function(){return false} 即可,不过添加了这个之后 要确保 父级里面没有 input type=”checkbox” 的标签,否则会导致其无效不可点击。
原文 http://www.asheep.cn/skill/onunload.html
在这里用到的是 onbeforeunload 事件。下面就梳理下 onunload、onbeforeunload 这两个事件,也顺带说说我遇到的问题与解决方案。
onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过 window.onunload来调用。区别在于onbeforeunload在onunload之前执行,它还可 以阻止onunload的执行。
onbeforeunload 是正要去服务器读 取新的页面时调用,此时还没开始读取;而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。
onunload事件
浏览器卸载页面后执行的事件, 虽然网上的资料没说什么兼容性的问题,但是实践发现兼容性并不理想。使用方法
//JS document window.onunload = function(){ alert("unload is work"); }
浏览器兼容情况
IE6,IE7,IE8 中 刷新页面、关闭浏览器之后、页面跳转之后都会执行;IE9 刷新页面 会执行,页面跳转、关闭浏览器不能执行;
firefox(包括firefox3.6) 关闭标签之后、页面跳转之后、刷新页面之后能执行,但关闭浏览器不能执行;
Safari 刷新页面、页面跳转之后会执行,但关闭浏览器不能执行;
Opera、Chrome 任何情况都不执行。
onbeforeunload事件
页面跳转时触发的事件。使用方法
//JS document window.onbeforeunload = function(){ return "onbeforeunload is work"; }
return 的值 为你需要告诉用户的提示信息如上面demo的话浏览器的提示是这样(firefox 并不支持文字提醒):
值得注意的是,网上流传说 可以通过检查 e.clientX e.clientY 判断 用户是否点击 右上角关闭浏览器的,但是实践发现 只有 IE6,IE7,IE8 能获取得到具体数值,其他浏览器均为 undefined。
浏览器兼容情况
IE、Chrome、Safari 完美支持Firefox 不支持文字提醒信息
Opera 不支持
IE6,IE7 使用 onbeforeunload 遇到的bug
凡是 <a> 标签 都会触发 onbeforeunload事件 包括 href=”javascript:void(0)” 这种。在IE6,IE7 下面 点击 里面的 a 标签,蛋疼的事情就发生了。
解决方法:
给这 a标签的 父级 添加 onclick=function(){return false} 即可,不过添加了这个之后 要确保 父级里面没有 input type=”checkbox” 的标签,否则会导致其无效不可点击。
原文 http://www.asheep.cn/skill/onunload.html
相关文章推荐
- 学习笔记01-关于extern和ifndef-def
- 用SugarORM快速开发需要同步和保存大量数据的Android互联网客户端
- 【Android开发进阶】Android屏幕适配全攻略(最权威的官方适配指导)
- PHP正则表达式完全教程之提高篇
- 显示shell结果的头部几行
- java Math类中的pow方法的问题Math.pow(64,1/3)是1而不是4 3ff8
- 题目:字符大小写排序
- 动态代理深入分析一
- hihocoder 1228 大模拟
- 题目:子集
- 设计模式 --> 代理模式(二)(源码模拟改进)
- Linux学习记录(11)LVM的基本概念和操作
- 响应式布局简介
- 解决axis2处理java.util.Date类型对象时丢弃时间部分的问题
- <C/C++算法> 图论基础算法小结(邻接矩阵实现)
- Linux下的一些I/O统计工具
- 题目:复制带随机指针的链表
- 洛谷1220关路灯
- Java Log4j配置说明
- 学习笔记02