javascript - 在 Safari、iOS 上使用 History API 后警告、确认和提示不起作用

标签 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 .

最佳答案

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

关于javascript - 在 Safari、iOS 上使用 History API 后警告、确认和提示不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38083702/

相关文章:

ios - iOS 中的 NSFaultingOrderedSet

ios - 快速重新加载 Collection View 不起作用

Javascript shift() unshift() 助记符?

javascript - 如何定义可打印区域?

javascript - IScroll 滚动到元素不起作用

ios - 在 UITableViewCell 中使用 UIPageControl 的 UIScrollView

javascript - 如何找出渐变中的所有颜色?

iphone - 切换表单输入动画在移动 Safari 中奇怪地弹跳

css - Bootstrap 4 在 iPhone 上的正文内容导航

javascript - jQuery 的 .data() 函数在 Kendo UI 中的作用是什么?