javascript - 为什么在使用相同的 location.href(或空)推送时 window.onpopstate 上的 event.state 为空

标签 javascript html5-history

在不更改 URL 的情况下推送到历史记录并设置数据时:

window.history.pushState({
    stateName: "myStateName", 
    randomData: window.Math.random()
}, "myStateName", location.href);

....然后监听弹出事件并通过按下浏览器中的返回按钮触发它:

window.onpopstate = function(event) {
  console.log(event.state); //logs null
}

大多数时候你会得到 null 作为状态值而不是:

{
    stateName: "myStateName", 
    randomData: 0.34234234234
}

我该如何解决这个问题,为什么会发生这种情况?

最佳答案

这是一个奇怪的问题,根据我的说法,它没有足够的记录。在寻找这个问题的解决方案时,我遇到了很多麻烦。经过一个小时沮丧的谷歌搜索并尝试/提出不同的解决方案后,我注意到当我将状态推送两次(或更多)时它开始工作。很明显,event.state 指的是被推送的倒数第二个状态。

所以让这项工作的答案是推两次,听一次。

window.history.push(..);
window.history.push(..);

我希望这对某人有帮助!

关于javascript - 为什么在使用相同的 location.href(或空)推送时 window.onpopstate 上的 event.state 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28363645/

相关文章:

javascript - 在 div javascript 数组上的按键导航

javascript - 历史记录 Pushstate 和 Popstate 无法正常工作

javascript - 可以在 AngularJs 中设置 base 标签的 href 属性吗?

javascript - Firefox 不会在转发时触发 popstate 事件

javascript - 具有 history.pushState 和 popstate 的 Ajax - 当 popstate 状态属性为 null 时我该怎么办?

javascript - 我正在尝试找到持续时间流量的中点(基于相对于出发时间的流量)

javascript - 如果浏览器不支持某些代码,如何执行特定的代码块?

javascript - "landing page"的一个好的定义是什么?

javascript - 使用 JavaScript 将 HTML(具有 Javascript)转换为 PDF

safari - Vue-Router:$router.go(-1) 在 Safari 中不起作用