onbeforeunload属性
描述
onbeforeunload:事件在即将离开当前页面(刷新或关闭)时触发*。
该事件可用于弹出对话框,提示用户是继续浏览页面还是离开当前页面。
对话框默认的提示信息根据不同的浏览器有所不同,标准的信息类似 “确定要离开此页吗?”。该信息不能删除。但你可以自定义一些消息提示与标准信息一起显示在对话框。
注意: 如果你没有在 元素上指定 onbeforeunload 事件,则需要在 window 对象上添加事件,并使用 returnValue 属性创建自定义信息(查看以下语法实例)。
语法
HTML中:
<body onbeforeunload="SomeJavaScriptCode">
javaSript中:
object.onbeforeunload=function(){SomeJavaScriptCode};
javaSript中使用addEventListener()方法:
object.addEventListener("beforeunload", SomeJavaScriptCode);
注意: Internet Explorer 8 及更早 IE 版本不支持 addEventListener() 方法。
实例
方法一:
window.onbeforeunload = function(){
return "是否要离开";
}
方法二:
window.onbeforeunload = function(event) {
event.returnValue = "我在这写点东西...";
};
方法三:
var beforeunloadHandler = function (e){
e = e || window.event;
e.returnValue = "我在这写点东西...";
}
window.addEventListener("beforeunload", (e) => beforeunloadHandler(e));
相关bug
通过浏览器刷新按钮或F5触发刷新时,也会给出一个弹框,让用户选择“不重新加载”还是“重新加载”:
通过右上角关闭按钮,或者a链接跳转时触发
但是桌面版chrome 60版本开始,如果用户没有在页面上进行交互(点击元素,按键事件,手势等动作),点击浏览器的返回按钮,刷新按钮时,chrome不会给出弹框,会直接进行返回、刷新的动作。
直接通过command + r进行刷新浏览器,和点击a标签跳转时,会弹框,因为浏览器已经检测到你的键盘按键交互和鼠标点击a标签的交互了。
这就是报下面错误的原因:
相关链接:https://github.com/mrdulin/blog/issues/38
此问题尚未解决,望留言解答!!!谢谢~~
相关业务场景:
https://tapd.tencent.com/创建需求,csdn发布文章,apizza接口编辑,
如果用户没有在页面上进行交互(例如:编辑文字)那么点击浏览器的返回按钮,刷新按钮时直接进行返回、刷新的动作在某种程度上是否符合业务场景需求。
部分代码执行情况
- vue.js中路由跳转无法自动触发事件。(在csdn发布文章返回键可触发事件,应该为手动触发吧)