Firefox Addon:如何在卸载插件时删除首选项?

Rac*_*oon 5 javascript firefox firefox-addon

我的Firefox插件中有以下代码:

var firstrun = Services.prefs.getBoolPref("extensions.CustomButton.firstrun");

if (firstrun) {
  // alert("first run");
  Services.prefs.setBoolPref("extensions.CustomButton.firstrun", false);
  installButton("nav-bar", "custom-button-1");
} else {
  // alert("not first run");
} 
Run Code Online (Sandbox Code Playgroud)

在addon_dir/defaults/preferences/pref.js中,我有以下字符串:

pref("extensions.CustomButton.firstrun", true);
Run Code Online (Sandbox Code Playgroud)

当addon第一次运行时,上面的代码理解它并在工具栏上安装一个按钮.此外,它将以下字符串添加到profile_dir/prefs.js:

user_pref("extensions.CustomButton.firstrun", false);
Run Code Online (Sandbox Code Playgroud)

它工作正常.唯一困扰的是当我卸载插件时,profile_dir/prefs.js中的这个字符串不会被清除.因此,如果我第二次安装此插件,则第四个值为false,并且该按钮不会添加到工具栏中.

问题:是否可以删除插件首选项(在我的情况下,user_pref("extensions.CustomButton.firstrun",false);)卸载addon时?

注意:我已经阅读了这篇文章,但仍然不知道要等待什么事件.任何工作的例子?我相信对于插件创作者来说这是一个常见的操作,我很惊讶没有文章详细解释这些问题.

Rac*_*oon 0

AddonManager.addAddonListener({
    onUninstalling: function(addon){
        // alert("uninstalling!");   
        Services.prefs.setBoolPref("extensions.CustomButton.firstrun", true);
    }
  });
Run Code Online (Sandbox Code Playgroud)

  • 如果你想使用这种方式,你必须在 bootstrap.js 中全局添加它。因为如果禁用插件,则浏览器重新启动,然后用户单击卸载,然后引导程序中的所有全局变量都会初始化。这样就会添加这个监听器。 (2认同)