【问题标题】:Why is event.state on window.onpopstate empty when pushing with same location.href (or empty)为什么在使用相同的 location.href(或为空)推送时 window.onpopstate 上的 event.state 为空
【发布时间】:2015-02-06 10:28:30
【问题描述】:

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

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
}

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

【问题讨论】:

    标签: javascript html5-history


    【解决方案1】:

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

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

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

    我希望这对某人有帮助!

    【讨论】:

      猜你喜欢
      • 2012-06-21
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      相关资源
      最近更新 更多