window.onpopstate, event.state == null?

新手上路,请多包涵

我已经阅读了关于 Stack Overflow 的几个问题/答案并用 Google 搜索了这个问题,我似乎无法得到 event.state 除了 null 之外的任何东西。

我知道它不能与 jQuery 事件一起使用,但是当我做这样的事情时:

 window.onpopstate = function (e) {
     console.log(e.state)
}

与 jQuery.ajax 成功调用类似

history.pushState({ lastUrl: data.State }, data.Title, data.UrlKey);

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

原文由 mihok 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 466
2 个回答

e.state 指的是被推送的倒数第二个状态。您需要至少两次推送状态 e.state 而不是 null 。这是因为您应该在第一次加载站点时保存状态,此后每次更改状态时都应保存状态。

原文由 Jaco Briers 发布,翻译遵循 CC BY-SA 3.0 许可协议

我认为这个问题需要更明确的解释,因为其他答案中的“second last state that was pushed”这句话可能会导致混淆。

当我们执行 history.pushState 时,我们将一个新的状态推入历史堆栈,它成为当前状态(正如我们从导航栏 url 中看到的那样)。

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

原文由 MQ87 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏