如何使用XUL?</browser>在Firefox中克隆<browser>元素

时间:2013-12-11 00:16:25

标签: javascript firefox browser firefox-addon xul

我正在开发一个firefox扩展,我需要保存任意网页的状态,以便以后能够恢复该网页。怪癖是我需要恢复页面的整个状态,包括所有javascript变量的状态。 “保存”可以在内存中完成,不需要序列化。

那么,有没有办法准确克隆一个browser元素,以便它从原来当前所处的相同执行点开始运行?

如果没有,将它添加到firefox(使用C ++)需要多少努力,以及我将开始查看哪些文件和文档?

2 个答案:

答案 0 :(得分:1)

不,没有办法完全按照自己的意愿行事。即使built-in session restore只会恢复表单字段(和其他一些选定的东西),但不会恢复完整的JS和本机对象状态。

实现这样的事情本身并不可行(并且也是一项艰巨的任务):

  • 你可以uneval()大多数js对象,但这会丢失类型信息,你只会获得源,但不会获得任何内部状态(通过闭包认为“隐藏”状态)。像windowdocument这样的本地对象需要一些特殊处理,如果没有一些C ++级别的“反射”,那么获取内部状态并不总是可行的。
  • 您可能会以新的方式使用调试器API获得大量实际状态,但是我没有看到任何方法可以在以后实际恢复它。而“很多”仍然与“所有”不一样。

关于封闭的“隐藏”状态: 在以下示例中,我无法可靠地获取counter的内部状态,更不用说稍后还原它,而不会像平台相关的完整内存转储那样低级别。

var count = (function() {
  var counter = 0;
  return function() { return ++counter; };
})();
count();
count();

答案 1 :(得分:0)

我猜你可以遍历所有对象的属性并将它们保存在某个地方,但是保留了对象的上下文。绑定功能会很困难。也许你可以使用会话商店?

请参阅: Session_store_APInsISessionStore