我在JavascriptMVC应用程序中使用window.history
来为每个控制器启用后退/前进/刷新功能。每次加载新控制器时,我都会使用window.history.pushState
向历史记录添加新状态。然后在返回/刷新时我正在使用已保存的状态并重新使用数据来再次构建控制器。
除了特定情况下的一个问题外,整个想法都很好。我收到以下错误:
无法在“历史记录”上执行“pushState”:对象无法执行 克隆
在其他方案中添加相同的数据没有问题。什么可能导致此错误? 谢谢你的帮助。
答案 0 :(得分:30)
https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history
“状态对象可以是任何可以序列化的对象。因为Firefox将状态对象保存到用户的磁盘上,所以在用户重新启动浏览器后可以恢复它们,我们在序列化表示形式上强加了640k字符的大小限制。如果将序列化表示形式大于this的状态对象传递给pushState(),则该方法将抛出异常。如果需要更多空间,则鼓励使用sessionStorage和/或localStorage。“< / p>
看起来简单的答案是,您传入的状态可能序列化为大于640k。我刚遇到这个错误,我几乎可以肯定这是原因。
答案 1 :(得分:2)
window.history.pushState
的字符串大小限制为 64万个字符。
最好切换到localStorage
或sessionStorage
。
来源:https://developer.mozilla.org/en-US/docs/Web/API/History/pushState