为什么 event.state 在 window.onpopstate 上用相同的 location.href (或空)推送时为空
Why is event.state on window.onpopstate empty when pushing with same location.href (or empty)
在不改变的情况下推送到历史记录和设置数据时URL:
window.history.pushState({
stateName: "myStateName",
randomData: window.Math.random()
}, "myStateName", location.href);
..... 然后监听pop事件,在浏览器中按返回键触发:
window.onpopstate = function(event) {
console.log(event.state); //logs null
}
大多数情况下,您将获得 null 作为状态值,而不是:
{
stateName: "myStateName",
randomData: 0.34234234234
}
我该如何解决这个问题,为什么会这样?
这是一个奇怪的问题,根据我的说法,它没有足够的记录。在寻找这个问题的解决方案时,我遇到了很多麻烦。经过一个小时的沮丧谷歌搜索和 trying/coming 不同的解决方案后,我注意到当我将状态推两次(或更多)时它开始工作。很明显 event.state 指的是被推送的倒数第二个状态。
所以让这个工作的答案是推两次,听一次。
window.history.push(..);
window.history.push(..);
希望对大家有所帮助!
在不改变的情况下推送到历史记录和设置数据时URL:
window.history.pushState({
stateName: "myStateName",
randomData: window.Math.random()
}, "myStateName", location.href);
..... 然后监听pop事件,在浏览器中按返回键触发:
window.onpopstate = function(event) {
console.log(event.state); //logs null
}
大多数情况下,您将获得 null 作为状态值,而不是:
{
stateName: "myStateName",
randomData: 0.34234234234
}
我该如何解决这个问题,为什么会这样?
这是一个奇怪的问题,根据我的说法,它没有足够的记录。在寻找这个问题的解决方案时,我遇到了很多麻烦。经过一个小时的沮丧谷歌搜索和 trying/coming 不同的解决方案后,我注意到当我将状态推两次(或更多)时它开始工作。很明显 event.state 指的是被推送的倒数第二个状态。
所以让这个工作的答案是推两次,听一次。
window.history.push(..);
window.history.push(..);
希望对大家有所帮助!