事件的可靠性如何window.onbeforeunload
?
- 它会在所有主要浏览器中触发吗?
- 如果客户端浏览器崩溃,它会触发吗?
- 它是否能够延迟关闭事件以防它可能需要“更长一点”或者它会被切断?
- 有没有其他选择?
事件的可靠性如何window.onbeforeunload
?
它会在所有主要浏览器中触发吗?
是的,onbeforeunload
适用于我曾经尝试过的所有浏览器。
如果客户端浏览器崩溃,它会触发吗?
不,如果浏览器崩溃然后它就死了,那么这个事实就没有办法了。
它是否能够延迟关闭事件以防它可能需要“更长一点”或者它会被切断?
我在评论中说“不”,但这确实取决于。例如,如果您有一个非常长的循环,它将在页面关闭之前完全执行。但是,您不能setTimeout
在处理程序中使用 AJAX 或任何其他异步函数。它必须以同步方式返回一个字符串以阻止卸载。
有没有其他选择?
同样,我在评论中说“不”,但我可以进一步详细说明。如果您将事件处理程序附加到您的页面以检测对链接的单击,则可以手动调用该onbeforeunload
处理程序以获取字符串响应,并使用它来显示自定义确认框,并在您执行此操作时取消单击事件。请注意,这不会影响重新加载、后退、前进或关闭按钮,只会单击指向新页面的链接。您还应该注意不要影响到同一页面上的锚点的链接,或javascript:void(null);
类型链接。这也将允许您发出 AJAX 请求,如果用户确认要离开页面,您可以在加载新页面之前做一些事情。
长话短说,在某些情况下还有其他选择,但这一切都源于onbeforeunload
事件并且可能相当复杂。