加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

JavaScript 捕获网页打消封锁变乱

发布时间:2018-10-07 17:12:22 所属栏目:创业 来源:站长网
导读:在做Web开拓时,我们常常用到页面封锁变乱onbeforeunload,可以给用户一个选择放弃封锁的机遇,就好比这个博客编辑器。假如用户选择了分开,那么onunload变乱天然会触发;但若用户选择了打消,又该怎样检测呢? 我们假定一个页面分开打消变乱,叫做onunload
在做Web开拓时,我们常常用到页面封锁变乱onbeforeunload,可以给用户一个选择放弃封锁的机遇,就好比这个博客编辑器。假如用户选择了分开,那么onunload变乱天然会触发;但若用户选择了打消,又该怎样检测呢?

我们假定一个页面分开打消变乱,叫做onunloadcancel。显然,这个变乱应触发在用户按下对话框的打消按钮之后。但封锁提醒对话框的触发流程并不是那么简朴。我们先往返首下这个进程:

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.veryhuo.com] 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:

1.偶然按下封锁按钮,也会执行onunloadcancel,而且有个对话框一闪而过。假如换成while(1);赏识器会一向卡死,这声名onunloadcancel确实是执行了,只是烧毁了界面,但并没有停息剧本的运行。

2.假如是通过革新页面的方法分开,仅执行一次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>

这里行使了一种我也说不出缘故起因的步伐,应该算是hack,办理了FF下的bug。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读