Javascript 未能执行';pushState';在';历史';使用window.history.pushState函数时出错

Javascript 未能执行';pushState';在';历史';使用window.history.pushState函数时出错,javascript,html,javascriptmvc,Javascript,Html,Javascriptmvc,我在JavascriptMVC应用程序中使用window.history,为每个控制器启用后退/前进/刷新功能。每次加载新控制器时,我都在使用window.history.pushState向历史添加新状态。然后在返回/刷新时,我使用保存的状态并重用数据来再次构建控制器 除了一个关于特定场景的问题外,整个想法都很好。我得到以下错误: 未能对“历史记录”执行“pushState”:无法创建对象 克隆的 在其他场景中添加相同的数据没有问题。什么会导致此错误? 谢谢你的帮助。 “状态对象可以是任何可以

我在JavascriptMVC应用程序中使用
window.history
,为每个控制器启用后退/前进/刷新功能。每次加载新控制器时,我都在使用
window.history.pushState
向历史添加新状态。然后在返回/刷新时,我使用保存的状态并重用数据来再次构建控制器

除了一个关于特定场景的问题外,整个想法都很好。我得到以下错误:

未能对“历史记录”执行“pushState”:无法创建对象 克隆的

在其他场景中添加相同的数据没有问题。什么会导致此错误? 谢谢你的帮助。

“状态对象可以是任何可以序列化的对象。由于Firefox将状态对象保存到用户的磁盘,以便用户重新启动浏览器后可以恢复它们,因此我们对状态对象的序列化表示形式施加了640k个字符的大小限制。如果将序列化表示形式大于此值的状态对象传递给pushState(),则该方法将引发异常。如果您需要更多的空间,建议您使用会话存储和/或本地存储。”


看起来简单的答案是,您正在传递的状态可能正在序列化为大于640k。我刚刚遇到此错误,我几乎可以肯定这就是原因。

window.history.pushState
字符串大小限制640k个字符

最好切换到
localStorage
sessionStorage


来源:

感谢您的响应。问题是由我试图保存和序列化的对象中的某些循环依赖项引起的。在我删除循环依赖项后,问题得到了解决。我遇到了相同的问题,因为我正在将DOM元素传递给状态对象。这不是一个好主意。感谢您的回答:非常有用。得到了相同的错误使用Knockout是因为我没有取消对可观察对象的引用-在我应该推ID()时尝试推ID