在我的firefox扩展中,onUninstalled事件不会';我好像没开枪

在我的firefox扩展中,onUninstalled事件不会';我好像没开枪,firefox,firefox-addon,firefox4,Firefox,Firefox Addon,Firefox4,当用户卸载扩展时,Firefox4会暴露一些要检测的事件。我可以启动onUninstalling(当用户单击以删除扩展时),但是当启动onUninstalling时(应该在重新启动后发生),我无法启动任何操作 我最终希望在用户卸载我的扩展后显示一个页面。如果可以的话,我更愿意在onUninstalled之后执行此操作。方法onUninstalled是在删除扩展后调用的-因此您的扩展不可能接收自己的卸载事件,它将不再接收此事件。您可以获得有关其他加载项正在卸载的通知,但这正是此事件的要点。查看源代

当用户卸载扩展时,Firefox4会暴露一些要检测的事件。我可以启动
onUninstalling
(当用户单击以删除扩展时),但是当启动
onUninstalling
时(应该在重新启动后发生),我无法启动任何操作


我最终希望在用户卸载我的扩展后显示一个页面。如果可以的话,我更愿意在onUninstalled之后执行此操作。

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


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

很好的解释!谢谢你周到的答复。
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!");   
    }
  });