当window.onbeforeunload返回false时,Safari会保持“加载”状态

时间:2012-02-22 08:21:43

标签: javascript safari onbeforeunload

以下要点:https://gist.github.com/1876791(借鉴this question中的演示) 是一个在js中使用window.onbeforeunload的简单例子。

我们遇到的问题如下(适用于Safari 5.1.3而不是最新的Chrome版本):

  1. 访问此页面:http://www.4guysfromrolla.com/demos/OnBeforeUnloadDemo1.htm
  2. 点击其中一个链接,您会收到一条警告,询问您是否确实要离开此页面
  3. 点击“留在页面上”
  4. 使用cmd-R重新加载页面。如果你真的想离开这个页面,你会被问到另一次。
  5. 点击“留在页面上”。
  6. Safari保持“加载”状态,进度条显示为加载下一页。
  7. 这是Safari的错误吗?有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

即使在跳过OP的第2步和第3步时,我也能够重现这个问题。任何形式的重新加载都会出现这个问题。重现的简单步骤:

  1. 访问the page in question
  2. 点击重新加载。
  3. 点击“留在页面上”按钮。
  4. 加载进度在重新加载后立即进行预先啮合,并在确认对话框的整个生命周期内保持这种状态(显然是为了传达“悬越悬崖边缘”式的成熟情况;)但是:

    • 当使用“停留在页面上”按钮关闭对话框时,它会使停止的X符号保持开启状态,并且加载进度仍然处于约10%标记处。
    • 无法通过任何方式(键盘,按钮,脚本)取消此“加载”。
    • Web Inspector中的“网络”选项卡断言未发生任何加载。

    这看起来像Webkit / Safari UI错误 - 它看起来无法在页面停留状态下脱离进度条。最好将其报告给Webkit team,或者,自从您在Safari中体验到这一点后,Safari team可能会更好。

答案 1 :(得分:0)

请参阅此页面 - > https://developer.mozilla.org/en/DOM/window.onbeforeunload

您必须处理此事件。页面上的示例工作正常。这是代码:

window.onbeforeunload = function (e) {
  e = e || window.event;

  // For IE and Firefox prior to version 4
  if (e) {
    e.returnValue = 'Any string';
  }

  // For Safari
  return 'Any string';
};