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

Bol*_*rus 22 javascript html5 javascriptmvc

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

除了特定场景中的一个问题外,整个想法都很好.我收到以下错误:

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

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

小智 40

https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history

"状态对象可以是任何可以序列化的对象.因为Firefox将状态对象保存到用户的磁盘,因此可以在用户重新启动浏览器后恢复它们,我们在状态对象的序列化表示上强加了640k字符的大小限制.如果将序列化表示形式大于this的状态对象传递给pushState(),则该方法将抛出异常.如果需要更多空间,则鼓励使用sessionStorage和/或localStorage.

看起来简单的答案是,您传入的状态可能序列化为大于640k.我刚碰到这个bug,我几乎可以肯定这是原因.


Jas*_*ngh 9

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

最好切换到localStoragesessionStorage

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