我有一个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();
});
});
正如您在沙箱事件中看到的那样,在加载项和页面工作者之间来回传递一些消息
我希望worker.destroy()
删除对象和背景页面等。
这似乎没有发生。如果我进行一小时的浏览器会话,浏览器的内存使用率非常高,如果我在Firefox中检查about:memory
,我会看到很多sandbox.html
个窗口条目,我猜这些条目表明它们没有被销毁。< / p>
有人知道这是1.14中的错误吗? 或者我在这里做错了什么?其他选择?我需要一个可以与附加组件进行通信的沙盒页面,而页面工作者似乎是目前唯一的选择。
我发现SDK repo中有一个错误修复提交2013-09-26,可能与此https://github.com/mozilla/addon-sdk/commit/55aeedc69984a2c0df78ddb17cee35a960b1135b
有关提前感谢您对此提供任何帮助 吨。
答案 0 :(得分:0)
这似乎仍然是一个问题,我怀疑它会有什么问题。我刚刚遇到这个并最终通过在脚本末尾加载一个小的静态资源来最小化副作用:
window.location = "data:text/plain,goodbye";
这样,原始页面上的任何重复后台请求都将不再运行。请注意,这会导致页面工作者脚本重新评估,因此您必须检查脚本顶部的window.location
。