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