在Safari, iOS上使用历史API后,警报,确认和提示不起作用

Alert, confirm, and prompt not working after using History API on Safari, iOS

本文关键字:警报 确认 提示 不起作用 API 历史 iOS Safari      更新时间:2023-09-26

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

这是一个iOS bug吗?有什么已知的变通办法吗?

复制此行为的简单示例:

<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/fafw60 .

这是因为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();
    }
});

一个解决方法是在按钮上添加onload属性,创建一个添加侦听器的函数,然后在window上调用它。Onpopstate和window.onload