浅谈javascript中onbeforeunload与onunload事件


Posted in Javascript onDecember 10, 2015

在最近的项目中,需要做到一个时间,就是用户离开页面的时候,我需要缓存页面其中一部分的内容,但是我不需要用户刷新的时候也缓存,我只希望在我用户离开的时候

执行这个函数。百度之,有onbeforeunload与onunload这两个事件,但是onbeforeunload在用户刷新的时候也会执行。搞得我弄的挺久的,所以想在这里做一个小小的总结

onbeforeunload与onunload事件

onbeforeunload定义和用法

onbeforeunload 事件在即将离开当前页面(刷新或关闭)时触发。

该事件可用于弹出对话框,提示用户是继续浏览页面还是离开当前页面。

对话框默认的提示信息根据不同的浏览器有所不同,标准的信息类似 "确定要离开此页吗?"。该信息不能删除。

但你可以自定义一些消息提示与标准信息一起显示在对话框。

注意: 如果你没有在 <body> 元素上指定 onbeforeunload 事件,则需要在 window 对象上添加事件,并使用 returnValue 属性创建自定义信息(查看以下语法实例)。

注意: 在 Firefox 浏览器中,只显示默认提醒信息(不显示自定义信息)。

使用方法:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>test</title>
</head>
<body onbeforeunload="return test()">
   
</body>
<script type="text/javascript">
  function test(){
    return "你确定要离开吗";
  }
</script>
</html>

或者:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>test</title>
</head>
<body>
   
</body>
<script type="text/javascript">
window.onbeforeunload=function(){
  return "你确定要离开吗";
}
 
</script>
</html>

事件触发的时候弹出一个有确定和取消的对话框,确定则离开页面,取消则继续待在本页。当然你可以自定义提示文本。

那么,当我只需要在我离开时执行这个函数,而刷新的时候不执行,那怎么做呢?

window.onbeforeunload = function() {
 
    var n = window.event.screenX - window.screenLeft;
 
    var b = n > document.documentElement.scrollWidth - 20;
 
    if (!(b && window.event.clientY < 0 || window.event.altKey)) {
      //window.event.returnValue = "真的要刷新页面么?";
      
      //这里放置我想执行缓存的代码
      cacheFunction();
      
    }
 }

 这样,我离开页面时,可以执行我的缓存代码,而不弹出提示框,我刷新时也不弹出提示框,也不执行。值得一提的时,这个时候,要将ajax设置为同步,即:ajax里面的 async改为: false;

浏览器兼容情况

IE、Chrome、Safari 完美支持

Firefox 不支持文字提醒信息

Opera 不支持

IE6,IE7 使用 onbeforeunload 遇到的bug

2、onunload定义和用法

onunload 事件在用户退出页面时发生。

使用方法和onbeforeunload类似

window.onunload = function(){
  return "你确定要离开吗"
}

浏览器兼容情况

IE6,IE7,IE8 中 刷新页面、关闭浏览器之后、页面跳转之后都会执行;

IE9 刷新页面 会执行,页面跳转、关闭浏览器不能执行;

firefox(包括firefox3.6) 关闭标签之后、页面跳转之后、刷新页面之后能执行,但关闭浏览器不能执行;

Safari 刷新页面、页面跳转之后会执行,但关闭浏览器不能执行;

Opera、Chrome 任何情况都不执行。

总结

       Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过window.onunload来指定或者在<body>里指定。区别在于onbeforeunload在onunload之前执行,它还可以阻止onunload的执行。

Onbeforeunload也是在页面刷新或关闭时调用,Onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取;而onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。Onunload是无法阻止页面的更新和关闭的。而 Onbeforeunload 可以做到。

页面加载时只执行onload
页面关闭时先执行onbeforeunload,最后onunload
页面刷新时先执行onbeforeunload,然后onunload,最后onload。

Javascript 相关文章推荐
调用HttpHanlder的几种返回方式小结
Dec 20 Javascript
javaScript 计算两个日期的天数相差(示例代码)
Dec 27 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
Mar 19 Javascript
angularJS 入门基础
Feb 09 Javascript
javascript 常见功能汇总
Jun 11 Javascript
jQuery实现的tab标签切换效果示例
Sep 05 Javascript
懒加载实现的分页&amp;&amp;网站footer自适应
Dec 21 Javascript
用js将long型数据转换成date型或datetime型的实例
Jul 03 Javascript
详解node如何让一个端口同时支持https与http
Jul 04 Javascript
Jquery和CSS实现选择框重置按钮功能
Nov 08 jQuery
详解json串反转义(消除反斜杠)
Aug 12 Javascript
js+css3实现炫酷时钟
Aug 18 Javascript
详解JavaScript基于面向对象之创建对象(2)
Dec 10 #Javascript
JS提交form表单实例分析
Dec 10 #Javascript
详解JavaScript基于面向对象之创建对象(1)
Dec 10 #Javascript
AngularJs实现ng1.3+表单验证
Dec 10 #Javascript
理解AngularJs指令
Dec 10 #Javascript
详解AngularJS实现表单验证
Dec 10 #Javascript
jquery实现鼠标悬浮停止轮播特效
Aug 20 #Javascript
You might like
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
php curl基本操作详解
2013/07/23 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
PHP chr()函数讲解
2019/02/11 PHP
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
小程序和web画三角形实现解析
2019/09/02 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
python基础之入门必看操作
2017/07/26 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
python3中sys.argv的实例用法
2020/04/24 Python
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
中文专业毕业生自荐信
2013/10/28 职场文书
索桥的故事教学反思
2014/02/06 职场文书
地球一小时活动总结
2015/02/27 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
开场白怎么写
2015/06/01 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
Go语言空白表示符_的实例用法
2021/07/04 Golang