onbeforeunload的可靠性

时间:2013-05-30 15:39:30

标签: javascript onbeforeunload

活动window.onbeforeunload的可靠性如何?

  1. 是否会在所有主流浏览器中触发?
  2. 如果客户端浏览器崩溃,它会触发吗? (我相信奇迹)
  3. 是否可以延迟关闭事件,以防它可能需要“再长一点”或是否会被切断?
  4. 还有其他选择吗?

1 个答案:

答案 0 :(得分:12)

  1. 是的,onbeforeunload适用于我尝试过的每个浏览器。
  2. 不,如果浏览器崩溃然后它就会死掉,那就无法解决这个问题了。
  3. 我在评论中说“不”,但确实有些依赖。例如,如果您有一个非常长的循环,它将在页面关闭之前完全执行。但是,您不能在处理程序中使用AJAX或任何其他异步函数,如setTimeout。它必须以同步方式返回一个字符串,以阻止卸载。
  4. 同样,我在评论中说“不”,但我可以进一步阐述。如果您将事件处理程序附加到页面以检测链接上的单击,则可以手动调用onbeforeunload处理程序以获取字符串响应,并使用该处理程序显示自定义确认框,取消单击事件为你这样做了请注意,这不会影响重新加载,后退,前进或关闭按钮,只会单击指向新页面的链接。您还应注意不要影响同一页面上锚点的链接,或javascript:void(null); - 类型链接。这也允许您发出AJAX请求,如果用户确认要离开页面,您可以在加载新页面之前做一些事情。

    长话短说,在某些情况下有其他选择,但这一切都源于onbeforeunload事件并且可能相当复杂。