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

问题描述:

Firefox 4公开了一些事件来检测用户何时卸载扩展。我可以得到onUninstalling(当用户点击删除扩展名时),但当onUninstalled触发时(这应在重新启动后发生)时,我无法获得任何结果。在我的Firefox扩展中,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后执行此操作。

方法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

+0

很好的解释!谢谢你的深思。 – Newtang 2011-06-10 04:56:48