javascript - Components.utils.unload 在 Firefox 引导扩展中是异步的吗?

标签 javascript firefox firefox-addon firefox-addon-restartless

我注意到禁用引导插件时偶尔会出现错误。

功能关闭:

function shutdown(data, reason) {

  forEachOpenWindow(unloadFromWindow);
  Services.wm.removeListener(WindowListener);
  Components.utils.unload('chrome://myaddon/content/main.jsm');
}

有时,禁用插件时会出现错误:

NotFoundError: Node was not found main.jsm:112

Components.utils.unload()吗?是异步的吗?

1- 是这种情况还是由于其他问题造成的?
2- 如果是这种情况,应该如何处理?
3- 能否将 Components.utils.unload() 添加到要删除(删除自身)的 JSM 中(在其中进行处理)?
4-还有其他建议吗?

更新:

下一个测试:
禁用——没有错误
启用/禁用 -- 1 个错误(上图)
启用/禁用 - 2 个错误(上方)
启用/禁用 - 3 个错误(以上)
启用/禁用 - 4 个错误(以上)
启用/禁用 - 5 个错误(以上)

现在这很奇怪......

更新2:
我发现了问题...其中一个监听器中存在拼写错误/错误,因此在 shutdown() 上它没有被删除,并且每次后续启用/禁用又添加了一个监听器...这就是为什么每次错误数量都会增加:)

最佳答案

Is Components.utils.unload asynchronous in Firefox bootstrapped extensions?

Cu.unload 不是异步的。而且,它可能不会达到您的预期。

它只会指示模块加载器忘记它。其他代码对模块实例的任何引用仍然有效,即模块实例将一直处于事件状态,直到对它的所有其他引用都消失并且可以被垃圾收集为止。

在这方面,unload 看起来有点异步。

3- Can the Components.utils.unload() be added to (processed in) the JSM that it is removing (removing itself)?

是的,模块可以自行Cu.unloadCu.unload 之后的代码仍然可以工作(另请参阅我的答案的第一部分)。

关于javascript - Components.utils.unload 在 Firefox 引导扩展中是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24483344/

相关文章:

firefox - 如何在网页上运行任何内联脚本之前运行用户脚本?

javascript - HTML5 LocalStorage 大小

javascript - 如何检测 Firefox WebPanel 何时关闭?

java - 应用程序在退出并重新进入后表现不同

javascript - 我可以使用 jQuery 和外部 JSON 数据以编程方式绘制 HTML5 Canvas x/y 点吗?

javascript - 使用 Firefox 插件的跨域通信

firefox - 如何注入(inject)位于/皮肤上的CSS?

javascript - 退出 Firefox 后警报仍然存在吗?

javascript - 为什么一旦我们将相同的函数添加到其原型(prototype)中,作为对象属性的函数就无法访问?

javascript - 每次使用 Router 时 Backbone.js 触发函数