页面工作线程 - destroy() 似乎没有删除窗口对象
Page Worker - destroy() does not seems to remove the window object
我有一个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 事件,在页面工作线程上调用 destroy()
我希望worker.destroy()
删除对象和背景页面等。这似乎没有发生。如果我进行一个小时的浏览器会话,浏览器的内存使用率非常高,如果我在 Firefox 中检查about:memory
,我会看到很多sandbox.html
窗口条目,我想这表明它们没有被销毁。
有谁知道这是否是 1.14 中的错误?还是我在这里做错了什么?其他选择?我需要有一个可以与附加组件通信的沙盒页面,而页面工作者似乎是目前唯一的选择。
我看到 SDK 存储库中有一个 2013-09-26 提交的错误修复,可能与此 https://github.com/mozilla/addon-sdk/commit/55aeedc69984a2c0df78ddb17cee35a960b1135b
提前感谢您对此的任何帮助t.
这似乎仍然是一个问题,我怀疑是否会有修复方法。我刚刚遇到这个问题,最终通过在脚本末尾加载一个小的静态资源来最大限度地减少副作用:
window.location = "data:text/plain,goodbye";
这样,原始页面上的任何重复后台请求将不再运行。请注意,这将导致页面工作线程脚本重新评估,因此您必须检查脚本顶部的window.location
。
相关文章:
- 解析JSON并从中删除对象会出错
- 在特定条件下从存储在localStorage中的阵列中删除对象
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 正在从列表中删除对象
- 删除对象时终止setInterval
- 在JavaScript中高效地删除对象
- 使用javascript(ajax,jquery?)从表中删除对象(用户等)
- 从范围中删除对象时,它会在 Angularjs 中隐藏其余对象
- 如何正确地从数组中删除对象
- 捕捉.svg — 单击其中一个元素时删除对象
- 如何删除对象数组中的对象:jquery
- 下划线.js,根据键值删除对象数组中的重复项
- 如何在Immutable中从数组中删除对象
- 删除对象属性在执行删除操作之前生效
- 使用indexOf从列表中删除对象
- 从数组中删除对象
- 如何使用.bind(this)删除对象的事件侦听器
- 正在创建事件侦听器以从本地存储中删除对象
- 如何通过引用(javascript)从数组中删除对象
- 如何按条件删除对象中的对象