14

事件的可靠性如何window.onbeforeunload

  1. 它会在所有主要浏览器中触发吗?
  2. 如果客户端浏览器崩溃,它会触发吗?
  3. 它是否能够延迟关闭事件以防它可能需要“更长一点”或者它会被切断?
  4. 有没有其他选择?
4

1 回答 1

13
  1. 它会在所有主要浏览器中触发吗?
    是的,onbeforeunload适用于我曾经尝试过的所有浏览器。

  2. 如果客户端浏览器崩溃,它会触发吗?
    不,如果浏览器崩溃然后它就死了,那么这个事实就没有办法了。

  3. 它是否能够延迟关闭事件以防它可能需要“更长一点”或者它会被切断?
    我在评论中说“不”,但这确实取决于。例如,如果您有一个非常长的循环,它将在页面关闭之前完全执行。但是,您不能setTimeout在处理程序中使用 AJAX 或任何其他异步函数。它必须以同步方式返回一个字符串以阻止卸载。

  4. 有没有其他选择?
    同样,我在评论中说“不”,但我可以进一步详细说明。如果您将事件处理程序附加到您的页面以检测对链接的单击,则可以手动调用该onbeforeunload处理程序以获取字符串响应,并使用它来显示自定义确认框,并在您执行此操作时取消单击事件。请注意,这不会影响重新加载、后退、前进或关闭按钮,只会单击指向新页面的链接。您还应该注意不要影响到同一页面上的锚点的链接,或javascript:void(null);类型链接。这也将允许您发出 AJAX 请求,如果用户确认要离开页面,您可以在加载新页面之前做一些事情。

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

于 2013-05-30T20:21:28.637 回答