我正在开发一个firefox扩展,我需要保存任意网页的状态,以便以后能够恢复该网页。怪癖是我需要恢复页面的整个状态,包括所有javascript变量的状态。 “保存”可以在内存中完成,不需要序列化。
那么,有没有办法准确克隆一个browser
元素,以便它从原来当前所处的相同执行点开始运行?
如果没有,将它添加到firefox(使用C ++)需要多少努力,以及我将开始查看哪些文件和文档?
答案 0 :(得分:1)
不,没有办法完全按照自己的意愿行事。即使built-in session restore只会恢复表单字段(和其他一些选定的东西),但不会恢复完整的JS和本机对象状态。
实现这样的事情本身并不可行(并且也是一项艰巨的任务):
uneval()
大多数js对象,但这会丢失类型信息,你只会获得源,但不会获得任何内部状态(通过闭包认为“隐藏”状态)。像window
或document
这样的本地对象需要一些特殊处理,如果没有一些C ++级别的“反射”,那么获取内部状态并不总是可行的。关于封闭的“隐藏”状态:
在以下示例中,我无法可靠地获取counter
的内部状态,更不用说稍后还原它,而不会像平台相关的完整内存转储那样低级别。
var count = (function() {
var counter = 0;
return function() { return ++counter; };
})();
count();
count();
答案 1 :(得分:0)
我猜你可以遍历所有对象的属性并将它们保存在某个地方,但是保留了对象的上下文。绑定功能会很困难。也许你可以使用会话商店?