0

想象一下,我们已经加载了一个包含大量 Javascript 的复杂网站,该网站通过 AJAX 加载各种信息,并根据用户输入进行计算。所以,现在假设我们想以这样一种方式归档它,以便我们以后可以可靠地从文件中加载它(甚至可能没有互联网连接)并研究它的行为/调试它/等等。有没有办法做到这一点?

4

3 回答 3

2

浏览器已经这样做以使“返回”按钮快速工作——在 Firefox 中它被称为“bfcache”。不过,这个缓存只存在于内存中。我不知道是否可以将其序列化为文件,如果可以,那将非常有趣。

于 2010-01-10T22:50:54.547 回答
1

我认为没有一种方法可以导出整个 DOM 状态,而无需手动查看每一块并存储它。表示该 DOM 的信息比源代码中可见的信息要多。

例如,您可能希望将窗口对象中可用的窗口滚动条位置保存为window.scrollXwindow.scrollY。这只是一个示例,但还有许多其他状态信息需要保存,包括附加的事件处理程序等。

如果您可以识别与您的目的相关的部分而忽略其他部分,则可以使用 Google Gears(现已过时)或 HTML5 中引入的新本地存储将其存储在本地,如果您已经序列化此信息,则可以将其传递给到某个服务器并从那里恢复它。HTML5 中的新存储机制被称为DOM Storage但它有点误导,因为它只是一个键值对存储,其中键和值都是字符串。

编辑:这可能是对问题的不同看法,但在这里。您可以只存储初始状态以及更改它的相关操作,而不是存储整个 DOM 状态。为了达到最终状态,将使用重放机制按顺序运行每个动作。这是一种流行的设计模式,称为命令模式。这就是多人游戏如何通过仅传递诸如击键、鼠标移动等玩家动作而不是整个视图来使每个玩家保持最新和同步的方式,并且接收器应用这些动作来更新其状态。在实践中它比这要复杂得多,但这就是它的症结所在。

于 2010-01-10T22:58:14.830 回答
-1

你想把它存放在哪里?

目前没有办法在浏览器端存储任何东西(除了新的浏览器功能,很少有人安装)。如果 DOM 足够小,唯一现实的解决方案是使用 Cookie(这是因为 Cookie 只能保存一定数量的数据)。

如果您正在考虑在服务器端存储 DOM,那么您可以使用它document.body.innerHTML 来访问当前的 DOM 状态,然后将其发送到您的服务器。

于 2010-01-10T22:41:40.320 回答