0

我有一个创建页面工作者的 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();
  });
});

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

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

我希望worker.destroy()删除对象和背景页面等。这似乎不会发生。如果我进行一个小时的浏览器会话,则浏览器的内存使用率非常高,如果我签about:memory入 Firefox,我会看到很多sandbox.htmlWindows 条目,我猜这表明它们没有被破坏。

有谁知道这是否是 1.14 中的错误?还是我在这里做错了什么?其他选择?我需要一个可以与插件通信的沙盒页面,而 pageworker 似乎是目前唯一的选择。

我看到 SDK 存储库中有一个 2013 年 9 月 26 日提交的错误修复,可能与此有关https://github.com/mozilla/addon-sdk/commit/55aeedc69984a2c0df78ddb17cee35a960b1135b

提前感谢您对此 t 的任何帮助。

4

1 回答 1

0

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

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

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

于 2017-01-13T11:58:39.067 回答