5

我的 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");
} 

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

pref("extensions.CustomButton.firstrun", true);

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

user_pref("extensions.CustomButton.firstrun", false);

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

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

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

4

3 回答 3

2

对于引导插件,有一个uninstall()过程,但要触发它,您必须使用install()过程,只需传递两个参数并将函数留空即可。

这是我在附加组件中使用的内容: https ://gist.github.com/Noitidart/e0d3c21ab38822fbfd17

function uninstall(aData, aReason) {
    console.info('UNINSTALLING ZOOMR reason = ', aReason);
    if (aReason == ADDON_UNINSTALL) { //have to put this here because uninstall fires on upgrade/downgrade too
        //this is real uninstall
        var prefPrefix = 'extensions.my-addon@jetpack.';
        console.log('deleting branch of: ' + prefPrefix);
        Services.prefs.deleteBranch(prefPrefix);
    }
}
于 2014-06-06T06:29:12.307 回答
2

我的 Add-On中,我在安装时设置了这个:

const {Cc,Ci} = require("chrome");
var pref = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
pref.setIntPref("network.http.response.timeout", 3600*24);

我像这样解决了它,在我main.js的最后添加了这段代码:

exports.onUnload = function(reason) {
    //called when add-on is 
    //    uninstalled
    //    disabled
    //    shutdown
    //    upgraded
    //    downgraded
    pref.clearUserPref("network.http.response.timeout");
};

这有助于禁用和卸载插件。

注意:这仍然不完美,请参阅评论。我将不得不为此努力......

于 2014-06-06T00:15:18.423 回答
0
AddonManager.addAddonListener({
    onUninstalling: function(addon){
        // alert("uninstalling!");   
        Services.prefs.setBoolPref("extensions.CustomButton.firstrun", true);
    }
  });
于 2013-08-31T13:03:41.283 回答