在我的firefox扩展中,onUninstalled事件似乎没有触发

时间:2011-06-08 19:22:58

标签: firefox firefox-addon firefox4

Firefox 4公开了一些事件,以检测用户何时卸载扩展程序。我可以触发onUninstalling(当用户点击删除扩展名时),但是当onUninstalled触发时(在重启后应该发生),我无法做任何事情。

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之后再这样做。

1 个答案:

答案 0 :(得分:4)

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

总而言之,作为“经典”扩展,您必须使用onUninstalling,即使此事件无法保证将卸载扩展程序(用户仍可以恢复其选择)。引导扩展(不需要重新启动的扩展,请参阅https://developer.mozilla.org/en/Extensions/Bootstrapped_extensions)使其更容易,即使禁用扩展,也会调用bootstrap.js中的方法uninstall()。但是,将您的扩展程序转换为自举扩展并不总是很容易,附加了许多捕获:http://adblockplus.org/blog/how-many-hacks-does-it-take-to-make-your-extension-install-without-a-restart