我注意到在禁用自举插件时偶尔会记录错误。

功能关闭:

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:
我发现了问题... :)

最佳答案

Firefox自举扩展中的Components.utils.unload是否异步?


Cu.unload不是异步的。而且,它可能无法达到您的期望。

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

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


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


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

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

10-11 05:35