我在同一个问题上挣扎了好几个小时。太多小时了。onpopstate -handler 的状态参数为空,即使我在单击后退按钮之前已多次调用 pushState()。
我还观察到我的 onclick-handler 调用 pushState() 导致 onpopstate -handler 被触发。我相信 onpopstate -handler 只有在用户点击我在网上阅读的后退按钮时才会被调用。但就我而言,情况似乎并非如此。
浏览器可能有错误吗?似乎不太可能,因为我在 Chrome 和 FireFox 上都有相同或类似的问题。但有可能。或者也许有一个“规范中的错误”太复杂而无法正确实施。没有公开的单元测试显示这应该如何工作。
最后我找到了一个解决方案,之后一切都开始工作了。是将这两个调用放入我的 onload-handler 中:
pushState (myInitialState, null, href);
pushState (myInitialState, null, href);
所以我必须在 onload-handler 中进行相同的 push-state() 调用 TWICE!之后,我的 onpopstate -handler 开始获取状态不是 null 的参数,而是我之前作为参数传递给 pushState() 的状态。
我真的不明白为什么它现在可以工作,为什么当我只调用一次 pushState 时它不能更早。
我想了解为什么它现在可以工作,但我已经花了太多时间让它工作。如果有人在网上有很好的示例代码的参考,这将是很好的。