我的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);)何时卸载加载项
注意:我读过这篇文章,但仍然不知道该等什么事件。有工作实例吗?我相信这是插件创建者的常见操作,我很惊讶没有文章详细解释这些问题。
在我的加载项中,我在安装时设置了这个:
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");
};
这对禁用和卸载插件起到了作用。
注意:这仍然不完美,请参阅评论。我将不得不做这件事。。。
对于引导插件,有一个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);
}
}
AddonManager.addAddonListener({
onUninstalling: function(addon){
// alert("uninstalling!");
Services.prefs.setBoolPref("extensions.CustomButton.firstrun", true);
}
});