【问题标题】:Safari stays "loading" when window.onbeforeunload returns false当 window.onbeforeunload 返回 false 时,Safari 保持“加载”状态
【发布时间】:2012-02-22 08:21:42
【问题描述】:

以下要点: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 停留在“加载”状态,进度条显示好像要加载下一页一样。

这是来自 Safari 的错误吗?有没有办法规避这个问题?

【问题讨论】:

  • 这很奇怪,因为即使尝试 window.stop() 也不会让 Safari 停止假装它正在刷新页面。我想这是一个错误,请尝试将其报告给webkit guys
  • 如果我多次刷新也会发生这种情况。我不需要单击其中一个链接。我在电脑上运行 Safari 5.1.2。

标签: javascript safari onbeforeunload


【解决方案1】:

即使跳过 OP 的第 2 步和第 3 步,我也能重现此问题。任何形式的重新加载都会出现此问题。重现的最小步骤:

  1. 访问the page in question
  2. 点击重新加载。
  3. 点击“停留在页面”按钮。

加载进度在重新加载后立即在视觉上预先接合,并在确认对话框的整个生命周期内保持这种状态(显然是为了传达“悬在悬崖边缘”类型​​的成熟情况;)但是:

  • 当使用“停留在页面上”按钮关闭对话框时,它会留下停止的 X 符号,并且加载进度仍在进行并冻结在 10% 左右的标记处。
  • 不能通过任何方式(键盘、按钮、脚本)取消此“加载”。
  • Web Inspector 中的“网络”选项卡断言没有发生加载。

这看起来真的像一个 Webkit/Safari UI 错误 - 它看起来无法在页面停留条件下脱离进度条。最好将其报告给Webkit team,或者,由于您在 Safari 中体验过,也许Safari team 会更好。

【讨论】:

    【解决方案2】:

    请看这个页面-> 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';
    };
    

    【讨论】:

    • 我一开始就怀疑你的回答。然后我认为添加(e) 而不是() 会起作用。但是这个确切的页面gist.github.com/1960398(完全使用你的js代码)显示了我在我的问题中谈论的错误。
    • 这不是“我的 js 代码”。如果您可以检查它,我将来源作为链接提供给那里。
    • 是的,我也遇到过这段代码。对不起,我的评论不是很清楚。
    猜你喜欢
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多