在Safari,iOS上使用History API后,提示,确认和提示无法正常工作

时间:2016-06-28 18:29:18

标签: javascript ios mobile-safari back-button browser-history

在iOS上的Safari中调用history.pushState后,当使用浏览器后退按钮进行更改时,它不再可能使用alert(),confirm()或prompt()。

这是iOS错误吗?有没有已知的解决方法?

重现此行为的简单示例:

<html>
  <body>
    <ul>
      <li>Step 1: <button onclick="alert(Math.random())">Confirm Alert is working</button></li>
      <li>Step 2: <button onclick="history.pushState(null, null, '/debug/'+Math.random());">Change History</button></li>
      <li>Step 3: use your browser back button, to go back</li>
      <li>Step 4: <button onclick="alert(Math.random())">Alert is not working anymore</button></li>
    </ul>
  </body>
</html>

您可以在此处在线试用:goo.gl/faFW6o

3 个答案:

答案 0 :(得分:1)

这是因为Safari中的后退缓存。

您可以使用以下代码在按下后退按钮时强制重新加载。

window.onpageshow = function(e) { // e -> event
    if (e.persisted) {
        window.location.reload(); 
    }
};

此外,如果您使用的是jQuery ...

$(window).bind("pageshow", function(e) { // e -> event
    if (e.originalEvent.persisted) {
        window.location.reload();
    }
});

答案 1 :(得分:0)

询问此问题可能是一个问题。当我在Safari 12.0.2版中测试给定链接时,它似乎可以正常工作

答案 2 :(得分:0)

一种解决方法是改为在按钮上设置属性onload,创建一个添加侦听器的函数,然后在window.onpopstate和window.onload ..

上调用它。