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

Per*_*ost 10 javascript html5-history

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

window.history.pushState({
    stateName: "myStateName", 
    randomData: window.Math.random()
}, "myStateName", location.href);
Run Code Online (Sandbox Code Playgroud)

....然后通过按浏览器中的Back按钮来听pop事件并触发它:

window.onpopstate = function(event) {
  console.log(event.state); //logs null
}
Run Code Online (Sandbox Code Playgroud)

您将在大多数情况下将null作为状态值而不是:

{
    stateName: "myStateName", 
    randomData: 0.34234234234
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题,为什么会这样呢?

Per*_*ost 8

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

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

window.history.push(..);
window.history.push(..);
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助别人!