【问题标题】:Javascript stops executing in iframe after back button is pressed in mobile safari在移动 Safari 中按下后退按钮后,Javascript 停止在 iframe 中执行
【发布时间】:2012-02-01 10:39:32
【问题描述】:

我有一个适用于手机的网页,其中包含一个 iframe,其中包含在父目标中打开的链接。

在 iOS 5.0.1 上的 Safari 中,当用户单击链接,然后使用后退按钮返回页面时,javascript 停止在 iframe 内执行。

一个简单的演示来说明问题:

单击链接,确认警报并使用返回按钮。第二次单击该链接时,警报将不会显示。

index.html:

<html>
  <body>
    <iframe src="iframe.html"></iframe>
  </body>
</html>

iframe.html:

<html>
  <body>
    <a target="_parent" onclick="alert('Click')" href="http://www.google.com">
      Link
    </a>
  </body>
</html>

我想不出可能是什么原因造成的。有人遇到过这个吗?

【问题讨论】:

    标签: javascript ios iframe safari mobile-safari


    【解决方案1】:

    我遇到了同样的问题。似乎 iPad 的 Safari 对页面进行了快照,当您使用后退按钮返回该页面时,它会加载该快照并且 javascript 代码没有被执行。

    好像和这个问题有关: http://www.mac-forums.com/forums/internet-networking-wireless/257631-safari-ipad-back-button-generates-old-info.html

    非常烦人。我还没有找到解决办法。

    【讨论】:

      【解决方案2】:
      【解决方案3】:

      查看Problems with Page Cache in iOS 5 Safari when navigating back / unload event not fired的答案。

      对我有用的答案是执行以下操作:

      <body onunload="">
      ...
      <script type="text/javascript">
      if ((/iphone|ipod|ipad.*os 5/gi).test(navigator.appVersion)) {
        window.onpageshow = function(evt) {
          // If persisted then it is in the page cache, force a reload of the page.
          if (evt.persisted) {
             document.body.style.display = "none";
             location.reload();
          }
        };
      }
      </script>
      

      【讨论】:

      • 仅供参考-如果您将其应用于 iframe 内的页面,则此方法不起作用,它必须位于托管 iframe 的整个页面上。或者,可能是因为我的 iframe 确实嵌入在另一个 iframe 中。是的,我正在使用第三方组件。
      • 是的,这肯定需要在包含 iframe 的页面上。
      猜你喜欢
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 2019-01-01
      相关资源
      最近更新 更多