我注意到禁用引导插件时偶尔会出现错误。
功能关闭:
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.unload
。 Cu.unload
之后的代码仍然可以工作(另请参阅我的答案的第一部分)。
关于javascript - Components.utils.unload 在 Firefox 引导扩展中是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24483344/