在Firefox自举扩展中,Components.utils.unload是异步的吗?

时间:2014-06-30 05:18:23

标签: 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()上删除,并且每次后续启用/禁用都添加了一个侦听器...这就是错误数量增加的原因每次:))

1 个答案:

答案 0 :(得分:2)

  

在Firefox引导扩展中,Components.utils.unload是否异步?

Cu.unload不是异步的。但是,也可能没有达到预期目的。

它只会指示模块加载器忘记它。从其他代码对模块实例的任何引用仍然有效,即模块实例将处于活动状态,直到对它的所有其他引用都消失并且可以进行垃圾回收。

在这方面,似乎unload有点异步。

  

3-可以将Components.utils.unload()添加到(正在处理)正在删除的JSM中(自行删除)吗?

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