我注意到在禁用引导的插件时偶尔会出现错误。
功能关机:
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()
上删除,并且每次后续启用/禁用都添加了一个侦听器...这就是错误数量增加的原因每次:))
答案 0 :(得分:2)
在Firefox引导扩展中,Components.utils.unload是否异步?
Cu.unload
不是异步的。但是,也可能没有达到预期目的。
它只会指示模块加载器忘记它。从其他代码对模块实例的任何引用仍然有效,即模块实例将处于活动状态,直到对它的所有其他引用都消失并且可以进行垃圾回收。
在这方面,似乎unload
有点异步。
3-可以将Components.utils.unload()添加到(正在处理)正在删除的JSM中(自行删除)吗?
是的,模块可以自己Cu.unload
。 Cu.unload
之后的代码仍然可以使用(另请参阅我的答案的第一部分)。