window.onpopstate,event.state == null?

mih*_*hok 38 html javascript dom-events

所以我已经在stackoverflow上阅读了几个问题/答案并搜索了问题,我似乎无法得到event.state回来以外的任何东西,但 event.state

我知道它不适用于jQuery事件,但当我做这样的事情时:

window.onpopstate = function (e) {
     console.log(e.state)
}
Run Code Online (Sandbox Code Playgroud)

随着jQuery.ajax成功调用的东西

history.pushState({ lastUrl: data.State }, data.Title, data.UrlKey);
Run Code Online (Sandbox Code Playgroud)

Chrome(v19)或Firefox(v12)都不会返回任何空值?我错过了什么吗?它没有完全实现吗?

Jac*_*ers 60

e.state是指被推的第二个最后一个状态.你需要至少两次推动状态e.state才能成为null.这是因为您应该在第一次加载站点时保存状态,然后每次更改状态时保存状态.

  • 一般评论:我建议不要重载函数`window.onpopstate = function(e){`,而只是“监听”它`window.addEventListener(“ popstate”,function(event){`...,因为否则,您会ll取消您没有重写的其他实现。 (3认同)
  • 只是补充一下上面的答案:我更喜欢在加载时调用我想要的状态,而不是调用两次`pushState`,这会向历史记录添加2个条目。然后后续的“pushState”调用将按预期工作。 (2认同)

MQ8*_*Q87 15

我认为这个问题需要更清楚的解释,因为在其他答案中句子"被推迟的第二个状态"可能会导致混淆.

当我们执行history.pushState时,我们正在将历史堆栈推入一个新状态,该状态将成为当前状态(我们可以从导航栏的URL中看到).

window.onpopstate事件意味着正在弹出顶级历史状态(从堆栈中取出),因此e.state现在将指向堆栈中新的新顶级状态(因为导航栏将指向上一个URL).