最近项目中做到一个功能:在上传页面用户开始上传文件之后用户点击任意跳转都需要弹出提示层进行二次确定才允许他进行跳转,这样做的目的是为了防止用户的错误操作导致这珍贵的UGC 流失(通常用户在一次上传不成功之后,很容易就会打消了上传的念头的了,或去到其他平台进行上传)。

在这里用到的是 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标签的 父级 添加 οnclick=function(){return false} 即可,不过添加了这个之后 要确保 父级里面没有 input type=”checkbox” 的标签,否则会导致其无效不可点击。

转载于:https://www.cnblogs.com/yuhuameng/p/3894779.html

onunload、onbeforeunload事件详解--zhuan相关推荐

  1. html5 关闭窗口事件,web窗口关闭事件之onunload、onbeforeunload事件详解

    最近用到一个问题,当修改一篇内容时需要把此内容锁定,提交修改后解除锁定.那么问题出现了,当用户点了修改但未提交直接关掉窗口,那么此条信息一直处理锁定状态导致其他人员没办法修改. 在这里用到的是 onb ...

  2. onunload、onbeforeunload事件详解

    最近项目中做到一个功能:在上传页面用户开始上传文件之后用户点击任意跳转都需要弹出提示层进行二次确定才允许他进行跳转,这样做的目的是为了防止用户的错误操作导致这珍贵的UGC 流失(通常用户在一次上传不成 ...

  3. js中unload什么意思_JS之onunload、onbeforeunload事件详解

    简介 onunload,onbeforeunload都是在刷新或关闭时调用,可以在 onbeforeunload 是正要去服务器读 取新的页面时调用,此时还没开始读取:而onunload则已经从服务器 ...

  4. JavaScript事件详解-jQuery的事件实现(三)

    正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...

  5. php jquery点击事件,jQuery操作html元素点击事件详解

    这次给大家带来jQuery操作html元素点击事件详解,jQuery操作html元素点击事件的注意事项有哪些,下面就是实战案例,一起来看一下. 移除或禁用html元素的点击事件可以通过css实现也可以 ...

  6. ASP.NET页面事件详解

    ASP.NET页面事件详解 ASP.NET页面事件详解 1.Page_Init()事件 当页面初始化时发生此事件.可以利用Page_Init()将该事件与要在.NET页面上显示控件之前的运行的代码建立 ...

  7. WPF中的鼠标事件详解

    WPF中的鼠标事件详解 Uielement和ContentElement都定义了十个以Mouse开头的事件,8个以PreviewMouse开头的事件,MouseMove,PreviewMouseMov ...

  8. Spring Data JPA 从入门到精通~Auditing及其事件详解

    Auditing 及其事件详解 Auditing 翻译过来是审计和审核,Spring 的优秀之处在于帮我们想到了很多繁琐事情的解决方案,我们在实际的业务系统中,针对一张表的操作大部分是需要记录谁什么时 ...

  9. 移动端开发touchstart,touchmove,touchend事件详解和项目

    移动端开发touchstart,touchmove,touchend事件详解和项目 最近在做移动端的开发,在一个"服务商管理"页面使用到了触摸事件"touchstart& ...

最新文章

  1. workflow4.0学习资料
  2. 数学建模传染病模型_数学建模| 时间序列模型
  3. 一个比较方便的转换NSString为UTF8编码的函数
  4. 服务器性能和活动监视
  5. php oci 11g.dll下载,Oracle oci.dll
  6. Google Maps API 初级2
  7. 开源软件许可是什么_什么是开源? 许可,历史等
  8. 在Linux下巧下载
  9. No module named ‘win32gui‘ 的解决方法(踩坑之旅)
  10. iMovie for Mac如何创建分屏效果?
  11. 程序设计导引【总述】
  12. LAMP一键安装包是什么?
  13. 【JZOJ A组】东风谷早苗
  14. ​杠杆率是什么意思?外汇杠杆率高好还是低好?
  15. Ubuntu设置双显示器
  16. css 效果之并列排列
  17. 部署Guacamole远程控制桌面
  18. phpMyAdmin 4.8.1 远程文件包含 CVE-2018-12613 漏洞复现
  19. 用聊天机器人假扮人类
  20. 移动端,禁止横屏显示模板,干货!!!

热门文章

  1. java smtp_java发送邮箱(SMTP协议)
  2. 51单片机之IO口扩展——74HC595芯片串行转并行实验
  3. 深信服笔试题 php,2019深信服校招笔试题------木板接水
  4. 深信服2018年秋招测试工程师面试
  5. JQ中prop与attr区别
  6. htons函数具体解释
  7. python实现多项式回归
  8. lightGBM实战
  9. ValueError: ctypes objects containing pointers cannot be pickled的解决
  10. IM即时通讯开发万人群聊消息投递方案