繁体   English   中英

我该如何克隆一个 <browser> Firefox中使用XUL的元素?

[英]How can I clone a <browser> element in Firefox using XUL?

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

那么,是否有一种方法可以完全克隆browser元素,从而使其从与原始元素相同的执行点开始运行?

如果没有,那么将其添加到firefox(使用C ++)需要花费多少精力,我将开始查看哪些文件和文档?

不,没有一种方法可以完全满足您的需求。 即使是内置的会话还原也只能还原表单字段(和其他一些选定的内容),而不还原完整的JS和本机对象状态。

自己实现这样的操作是不可行的(并且也是一项艰巨的任务):

  • 您可以uneval()大多数js对象,但这将丢失类型信息,并且您将仅获取源,而不获取任何内部状态(通过闭包考虑“隐藏”状态)。 诸如windowdocument类的本机对象需要进行一些特殊处理,并且在没有某些C ++级别的“反射”的情况下,获取内部状态并非总是可能的。
  • 您可能会以新的方式使用调试器API来获得很多实际状态,但是我看不到有任何实际方法可以稍后恢复它。 而且“很多”仍然与“全部”不同。

关于封闭的“隐藏”状态:在下面的示例中,我不知道可靠地获取counter的内部状态的方法,更不用说稍后对其进行还原,而又不会获得与平台相关的完整内存转储的低级别信息了。

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

我猜想您可以遍历所有对象的属性并将它们保存在某处,但是要保留例如绑定函数的上下文将很困难。 也许您可以利用会话存储区吗?

请参阅: Session_store_APInsISessionStore

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM