在不更改网址的情况下推送到历史记录和设置数据时:
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
}
我如何解决这个问题?为什么会这样?
答案 0 :(得分:7)
这是一个奇怪的问题,据我所知,它没有足够的记录。我在寻找这个问题的解决方案时遇到了麻烦。经过一个小时的沮丧谷歌搜索和尝试/提出不同的解决方案后,我注意到它开始工作时,我推动状态两次(或更多)。很明显,event.state指的是被推的第二个最后状态。
所以做这项工作的答案是推两次,听一次。
window.history.push(..);
window.history.push(..);
我希望这有助于某人!