在移动safari中按下后退按钮后,Javascript将停止在iframe中执行

Javascript stops executing in iframe after back button is pressed in mobile safari

本文关键字:执行 iframe Javascript safari 移动 按钮      更新时间:2023-09-26

我有一个专为手机设计的网页,其中包含一个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>

我想不出是什么原因导致了这种情况。有人碰过这个吗?

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

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

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

这是一个Webkit错误:从[后退/前进]缓存恢复文档后,位置和其他对象功能失调

添加一个空的unload处理程序似乎可以避免iOS4中的问题,但不能避免iOS5中的问题。

查看iOS 5 Safari中导航返回/卸载事件未触发时页面缓存问题的答案。

对我有效的答案是做以下事情:

<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>