分享JavaScript获取网页关闭与取消关闭的事件

2020-02-29 16:00:36来源:爱站网 阅读 ()

新老客户大回馈,云服务器低至5折

在web开发中,我们经常在卸载软件都需要使用page close事件给用户放弃关闭的机会,就让爱站技术频道小编来告诉大家分享JavaScript获取网页关闭与取消关闭的事件,让大家体验体验。

我们假定一个页面离开取消事件,叫做onunloadcancel。显然,这个事件应触发在用户按下对话框的取消按钮之后。但关闭提示对话框的触发流程并不是那么简单。我们先来回顾下这个过程:

?

window.onbeforeunload = function()
{
??? return "真的离开?";
}

?

?

?

当用户准备离开页面(比如按下关闭按钮,或者刷新页面等等),onbeforeunload事件触发。我们的脚本无法在这个事件里决定是否阻止页面的关闭,唯一能做到的只有返回一个字符串,这个字符串仅作为说明文字出现在关闭选择对话框里,用户可以选择关闭,或者不关闭。但究竟选择哪个,我们无从得知。

然而仔细分析下这个问题,其实不然。 如果用户真选择了关闭页面,那么之后所有的运行代码都byebye了;而继续留在页面的话,就当什么都没发生过,除了onbeforeunload事件。所以,我们在onbeforeunload事件里做点小花招,在此注册个几毫秒之后启动的定时器,如果页面真关闭了,那么这个定时器当然是作废了;那么页面还在,几毫秒的延时对于这个本来就是异步的界面交互事件也没有什么误差。

?

?

<script language="JavaScript">
window.onbeforeunload = function()
{
??? setTimeout(onunloadcancel, 10);
??? return "真的离开?";
}
window.onunloadcancel = function()
{
??? alert("取消离开");
}
</script>


我们使用setTimeout,延时10ms执行onunloadcancel。如果页面真关闭了,定时器当然都销毁;反之继续。但在测试中,发现FireFox有个两个BUG:

?

有时按下关闭按钮,也会执行onunloadcancel,并且有个对话框一闪而过。如果换成while(1);浏览器会一直卡死,这说明onunloadcancel确实是执行了,只是销毁了界面,但并没有暂停脚本的运行。
如果是通过刷新页面的方式离开,仅执行一次onbeforeunload,但点击X按钮关闭页面,会执行两次onbeforeunload。因此我们还需在完善下,以便兼容FF。

?

<script language="JavaScript">
var _t;
window.onbeforeunload = function()
{
??? setTimeout(function(){_t = setTimeout(onunloadcancel, 0)}, 0);
??? return "真的离开?";
}
window.onunloadcancel = function()
{
??? clearTimeout(_t);
??? alert("取消离开");
}
</script>

?

?


估计大家通过爱站技术频道小编介绍的分享JavaScript获取网页关闭与取消关闭的事件,已经了解了,学会这些技巧大家肯定能在这里越走越远。


原文链接:https://js.aizhan.com/develop/JavaScript/11820.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:jquery改变disabled的boolean状态的三种方法

下一篇:浅谈JS的基础类型与引用类型