在我的firefox扩展中,onUninstalled事件似乎不会触发

在我的firefox扩展中,onUninstalled事件似乎不会触发,firefox,firefox-addon,firefox4,Firefox,Firefox Addon,Firefox4,当用户卸载扩展时,Firefox4会暴露一些要检测的事件。当用户单击删除扩展时,我可以让onUninstalling触发,但是当onUninstalling触发时,我不能让任何事情发生,而这应该在重启后发生 Components.utils.import("resource://gre/modules/AddonManager.jsm"); AddonManager.addAddonListener({ onUninstalled: function(addon){ //

当用户卸载扩展时,Firefox4会暴露一些要检测的事件。当用户单击删除扩展时,我可以让onUninstalling触发,但是当onUninstalling触发时,我不能让任何事情发生,而这应该在重启后发生

Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.addAddonListener({
    onUninstalled: function(addon){
        //does not work
        alert("uninstalled!");
    },
    onUninstalling: function(addon){
        //works as expected
        alert("uninstalling!");   
    }
  });
我最终希望在用户卸载我的扩展后显示一个页面。如果可以的话,我更愿意在onUninstalled之后执行此操作。

方法onUninstalled是在删除扩展后调用的-因此您的扩展不可能接收到自己的卸载事件,它将不再能够接收它。您可以获得有关其他加载项正在卸载的通知,但这正是此事件的要点。查看源代码,似乎还有一个额外的捕获-此通知仅针对不需要重新启动的加载项发送。由于外部应用程序在extensions目录中添加或删除了附加组件,因此重新启动可以从根本上改变这种情况,这是有道理的。因此,Firefox甚至不会试图传达在未运行时发生的更改,任何侦听器都应该在每次浏览器启动时重新读取附加组件列表


总而言之,作为一个经典的扩展,您必须进行onUninstalling,即使此事件不能保证该扩展将被卸载,用户仍然可以恢复其选择。bootstrap扩展不需要重新启动的扩展,请参阅,bootstrap.js中的方法uninstall将被调用,即使该扩展被禁用。然而,将您的扩展转换为自举扩展并不总是容易的,它附带了许多问题:

很好的解释!谢谢你周到的答复。