2

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

功能关闭:

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-还有其他建议吗?

更新:

下一个测试:
Disable -- 没有错误
Enable/Disable -- 1 错误(上图)
Enable/Disable -- 2 错误(上图)
Enable/Disable -- 3 错误(上图)
Enable/Disable -- 4 错误(上图)
Enable/禁用 -- 5 错误(上)

现在这很奇怪....

更新 2:
我发现了问题....其中一个侦听器中的错字/错误,因此它没有被删除,shutdown()并且随着每次后续启用/禁用,又添加了一个侦听器...这就是每次错误数量增加的原因:)

4

1 回答 1

2

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

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

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

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

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

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

于 2014-06-30T08:11:27.960 回答