使用window.history.pushState函数时,无法在“历史记录”错误上执行“pushState”

时间:2014-06-26 08:33:55

标签: javascript html5 javascriptmvc

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

除了特定情况下的一个问题外,整个想法都很好。我收到以下错误:

  

无法在“历史记录”上执行“pushState”:对象无法执行   克隆

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

2 个答案:

答案 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万个字符

最好切换到localStoragesessionStorage

来源https://developer.mozilla.org/en-US/docs/Web/API/History/pushState