跨浏览器会话持久化javascript对象可能吗? [复制]

Posted

技术标签:

【中文标题】跨浏览器会话持久化javascript对象可能吗? [复制]【英文标题】:Persisting javascript objects across browser sessions possible? [duplicate] 【发布时间】:2011-07-03 19:08:24 【问题描述】:

如果存在解决方案,或者是否可以将当前状态的网页的所有 javascript 对象保存或序列化到一个文件中,并在同一网页的新浏览器实例中恢复这些对象,是否有任何人?

我有一个网页,其中包含各种 Javascript 对象,并且想要一种方法来获取页面的“快照”并在以后将页面恢复到完全相同的状态。我已经能够序列化和恢复页面的整个 DOM 树,但 Javascript 对象没有恢复,因此页面看起来正确但无法正常运行。

【问题讨论】:

【参考方案1】:

除了其他人提到的cookies,你可以尝试使用html5的localStorage。

这里还有一个存储抽象库,可以帮助您使用所有这些库,并提供跨浏览器支持:

https://github.com/marcuswestin/store.js

【讨论】:

【参考方案2】:

您应该将所需的变量保存到对象中,并使用 JSON 对其进行编码,然后将其保存到 cookie。要恢复它,只需从 cookie 中检索对象并使用 JSON 解析器。

【讨论】:

我实际上已经考虑过走这条路,除了使用 HTML5 的本地存储而不是 cookie。我正在使用的 Javascript 对象实际上是 dojo 小部件,我一直无法找到将它们序列化或编码为 JSON 的方法。到目前为止,我尝试过的每种方法都遇到了“递归过多”的问题,因为对象包含函数和循环引用。 JSON 会跳过函数,并且它不适用于循环引用。此外,仅对应保存的对象属性(如 x 和 y)进行编码,并跳过您不想要的属性。对于我的多人游戏引擎(用 AS3 编写),我总是实现一个名为 getNetworkTable 的函数,它返回一个新对象,其中包含应该发送给客户端的所有内容,您可以使用类似的逻辑来解决您的问题。 顺便说一下,为了更紧凑的存储,我推荐:code.google.com/p/m28keyvalue,它的用法就像JSON:KeyValue.encode(obj, compress)(记得传递true来压缩)和KeyValue.decode(str)【参考方案3】:

您可以使用 JSON 序列化对象,然后将它们存储在 localStorage 中。大多数浏览器都支持它,并且可以存储比 cookie 更多的数据。也不会在每个请求标头中发送。请查看:https://github.com/johnhunter/netcache/localstore.js 以获取实现示例。

【讨论】:

以上是关于跨浏览器会话持久化javascript对象可能吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

4. ASP中APPlication.Cookie和Session对象的特点

javascript window.location 是跨浏览器吗?

JavaScript 现在BOM还有用吗?

跨会话持久保存 iPod 播放列表 (MPMediaItemCollection) 的最佳实践

Javascript:持久化窗口对象引用?

Java JPA:如何跨 HTTP 请求保持会话活动?