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

时间:2015-02-06 10:28:30

标签: javascript html5-history

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

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

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

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

您大部分时间都会将null作为状态值而不是:

{
    stateName: "myStateName", 
    randomData: 0.34234234234
}

我如何解决这个问题?为什么会这样?

1 个答案:

答案 0 :(得分:7)

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

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

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

我希望这有助于某人!