共享获取网页关闭和打开Javascript事件
在开发网站,我们经常使用的页面关闭事件onbeforeunload给用户一个机会放弃和关闭,如本博客编辑器。如果用户选择离开,那么onunload事件自然会触发;但如果用户选择取消它,它将如何被发现的我们假设一个网页,将取消事件,称为onunloadcancel。显然,这一事件应该是用户按下取消对话框按钮后触发。但它并非如此简单的关闭提示对话框的触发过程,让我们回到这个过程。
复制代码代码如下所示:
window.onbeforeunload =功能()
{
返回真的离开;
}
当用户离开页面(例如,按下关闭按钮,或刷新页面等),的onbeforeunload事件触发脚本。我们不能决定是否要关闭页面在这个事件。我们唯一能做的就是返回一个字符串,它出现在关闭选择对话框中作为解释文本,用户可以选择关闭或关闭。但是我们不知道要选择什么。
然而,对问题的仔细分析是不正确的。如果用户真的选择关闭网页,然后所有运行的代码是再见;如果你继续离开页面,什么也没有发生,除了onbeforeunload事件。所以,我们做一些花在onbeforeunload事件在投标,注册后几毫秒定时器启动,如果网页是真的关闭,那么定时器肯定是无效的;然后页面仍然是,界面交互事件这几毫秒的延迟是不是异步错误。
复制代码代码如下所示:
window.onbeforeunload =功能()
{
setTimeout(onunloadcancel,10);
返回真的离开;
}
window.onunloadcancel =功能()
{
警报(取消);
}
我们使用setTimeout和延迟10ms执行onunloadcancel。如果页面确实是封闭的,当然,定时器被破坏;另一方面,继续。但是在测试,发现Firefox有两个bug:
有时,关闭按钮被按下,onunloadcancel被执行,和一个对话框闪烁。如果它的变化,而(1),浏览器会卡住了,这意味着onunloadcancel实际上是执行,但却破坏了界面,但它没有暂停脚本的运行。
如果是通过刷新页面离开,只有一个onbeforeunload被执行,但X按钮被点击时,页面是封闭的,和两onbeforeunload执行。所以我们需要改进的是兼容FF。
复制代码代码如下所示:
无功_t;
window.onbeforeunload =功能()
{
setTimeout(函数(){ _t = setTimeout(onunloadcancel,0)},0);
返回真的离开;
}
window.onunloadcancel =功能()
{
ClearTimeout(_t);
警报(取消);
}
这里有一种方法我说不出原因,它应该是黑客,以解决在FF下的错误。