【JavaScript】ios进入页面立即触发popstate问题

2022/06/27 11:34:53

解决方案

pageshow 事件在 popstate 事件之前触发。

监听 pageshow 事件,通过一个 flag 来控制 popstate 事件处理函数。

let flag = true; //定义一个变量

window.addEventListener("pageshow", function () {
  flag = false; //进入页面时flag置为false,防止ios立即执行popstate
  setTimeout(function () {
    flag = true;
  }, 100);
});

window.addEventListener("popstate", () => {
  if (flag) {
    // 执行处理函数
  }
});

测试发现 pageshow 事件在三星浏览器上不触发,因此将 flag 默认值设置为 true

参考

js 监听手机物理键返回,并解决 ios 返回立即执行 popstate 事件的问题open in new window