简述在Js或Vue中监听页⾯的刷新、关闭操作
1、背景
⼤家是否经常遇到在关闭⽹页的时候,会看到⼀个确定是否离开当前页⾯的提⽰框?想⼀些在线测试系统、信息录⼊系统等就经常会有这⼀些提⽰,避免⽤户有意或者⽆意中关掉了页⾯,导致数据丢失。⽽最近在做项⽬的时候有⼀个需求,⽤户在表单页⾯中进⾏操作,为了防⽌⽤户在未保存表单数据的情况下离开、刷新页⾯等造成数据的丢失,需要在这种操作下出现是否离开的提⽰框,这⾥⾯的实现过程很简单,利⽤了HTML DOM事件中的和⽅法。
2、解决思路
阻拦,每次就是阻拦,⽽阻拦⼜有两种⽅法,⼀种是直接return,不管return的是什么;⼀种是修改事件的returnValue,两者效果是⼀样的。
3、两个属性的对⽐
定义
onbeforeunload :
onbeforeunload 事件在即将离开当前页⾯(刷新或关闭)时触发。
该事件可⽤于弹出对话框,提⽰⽤户是继续浏览页⾯还是离开当前页⾯。
对话框默认的提⽰信息根据不同的浏览器有所不同,标准的信息类似"确定要离开此页吗?"。该信息不能删除。
但你可以⾃定义⼀些消息提⽰与标准信息⼀起显⽰在对话框。
注意:如果你没有在 <body> 元素上指定 onbeforeunload 事件,则需要在 window 对象上添加事件,并使⽤ returnValue 属性创建⾃定义信息(查看以下语法实例)。
注意:在 Firefox 与 Chrome 浏览器中,只显⽰默认提醒信息(不显⽰⾃定义信息)
onunload :
onunload 事件在⽤户退出页⾯时发⽣。
onunload 发⽣于当⽤户离开页⾯时发⽣的事件(通过点击⼀个连接,提交表单,关闭浏览器窗⼝等等。)
注意: onunload 事件同样触发了页⾯载⼊事件(+ onload 事件)。
浏览器对onbeforeunload与onunload两个属性的⽀持程度
onbeforeunload  :
onunload :
使⽤
onbeforeunload  :原生js和js的区别
//body中
<body onbeforeunload="beforeunloadHandler()"></body>
//window中  vue写在mounted中
e = e || window.event;
/
/ 兼容IE8和Firefox 4之前的版本
if (e) {
}
// Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
return"您是否确认离开此页⾯-您输⼊的数据可能不会被保存";
};
//使⽤addEventListener
window.addEventListener("beforeunload", e => {
this.beforeunloadHandler(e);
});
onunload :
//body中
<body onunload="beforeunloadHandler()"></body>
//window中  vue写在mounted中
e = e || window.event;
// 兼容IE8和Firefox 4之前的版本
if (e) {
}
// Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
return"您是否确认离开此页⾯-您输⼊的数据可能不会被保存";
};
两者之间的区别
onbeforeunload、onunload都是在刷新或关闭时调⽤,可以在<body>⾥指定,也可以在原⽣的JS中在<script>脚本中通过window.⽅法名或者在vue的mounted⾥⾯通过window.⽅法名进⾏指定,区别在于onbeforeunload在onunload之前执⾏,它还可以阻⽌onunload的执⾏。onbeforeunload是正要去服务器读取新的页⾯时调⽤,此时还没开始读取;⽽onunload则已经从服务器上读到了需要加载的新的页⾯,在即将替换掉当前页⾯时调⽤。onunload是⽆法阻⽌页⾯的更新和关闭的,⽽ onbeforeunload 可以做到。
注意:
  页⾯加载时只执⾏onload
  页⾯关闭时先执⾏onbeforeunload,最后onunload
  页⾯刷新时先执⾏onbeforeunload,然后onunload,最后onload
4、简单使⽤
JS代码
mounted
window.addEventListener("beforeunload", e => {
this.beforeunloadHandler(e);
});
destroyed
this.beforeunloadHandler(e);
});
methods
/
**
* [beforeunloadHandler 浏览器关闭时进⾏⽤户提⽰]
* @return {[type]} [description]
*/
beforeunloadHandler(e) {
e = e || window.event;
if (e) {
}
return"您是否确认离开此页⾯-您输⼊的数据可能不会被保存";
},
在浏览器中的效果
Chrome
点击刷新
点击关闭
Edge
点击刷新
点击关闭
Firefox
点击刷新
点击关闭
IE
点击刷新
点击关闭
360(⽬前暂不⽀持该属性)
5、遇到的问题
暂⽆

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。