【问题标题】:Reliability of onbeforeunloadonbeforeunload 的可靠性
【发布时间】:2013-05-30 15:39:30
【问题描述】:

事件window.onbeforeunload的可靠性如何?

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

【问题讨论】:

  • 1-是,2-否,3-否,它必须同步返回一个字符串,否则卸载继续,4-否,这是唯一可能中断正在卸载的页面的方法。
  • 谢谢kolink!您能否启发我,为什么您不将此作为我可以接受的答案发布? (我对整个 stackoverflow 有点陌生)
  • 我完全期望这个问题会因为没有帮助而被关闭。显然那只是我!我会继续做一个答案。

标签: javascript onbeforeunload


【解决方案1】:
  1. 它会在所有主流浏览器中触发吗?
    是的,onbeforeunload 适用于我曾经尝试过的所有浏览器。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    相关资源
    最近更新 更多