Page Worker - destroy()似乎不会删除窗口对象

时间:2013-11-07 17:52:30

标签: javascript firefox firefox-addon firefox-addon-sdk

我有一个SDK插件,用于创建页面工作者

events.on(eventTarget, "sandbox", (details, content) => {
  var pageWorker = worker.Page({
    contentScriptFile: data.url("sandbox.js"),
    contentURL: data.url("sandbox.html"),
    contentScriptWhen: "end"
  });

  pageWorker.port.emit("detect-version", content, funcs);

  pageWorker.port.on("version-detected", (result) => {
    if (result.version) {
      events.emit(eventTarget, "result-ready", details, results);
    }
  });
  pageWorker.port.on("done", () => {
    pageWorker.destroy();
  });
});

正如您在沙箱事件中看到的那样,在加载项和页面工作者之间来回传递一些消息

  • 创建了页面工作者
  • 发送消息:detect-version
  • 侦听检测到的版本
  • 侦听done事件,在页面worker
  • 上调用destroy()

我希望worker.destroy()删除对象和背景页面等。 这似乎没有发生。如果我进行一小时的浏览器会话,浏览器的内存使用率非常高,如果我在Firefox中检查about:memory,我会看到很多sandbox.html个窗口条目,我猜这些条目表明它们没有被销毁。< / p>

有人知道这是1.14中的错误吗? 或者我在这里做错了什么?其他选择?我需要一个可以与附加组件进行通信的沙盒页面,而页面工作者似乎是目前唯一的选择。

我发现SDK repo中有一个错误修复提交2013-09-26,可能与此https://github.com/mozilla/addon-sdk/commit/55aeedc69984a2c0df78ddb17cee35a960b1135b

有关

提前感谢您对此提供任何帮助 吨。

1 个答案:

答案 0 :(得分:0)

这似乎仍然是一个问题,我怀疑它会有什么问题。我刚刚遇到这个并最终通过在脚本末尾加载一个小的静态资源来最小化副作用:

window.location = "data:text/plain,goodbye";

这样,原始页面上的任何重复后台请求都将不再运行。请注意,这会导致页面工作者脚本重新评估,因此您必须检查脚本顶部的window.location