我使用以下lib/main.js
创建了一个firefox加载项:
const {Cc,Ci} = require("chrome");
var pref = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
pref.setIntPref("network.http.response.timeout", 3600*24);
它没有被接受,原因如下:
更改关键设置的加载项必须在禁用或卸载时还原更改。您还应该在默认值而不是用户分支中进行更改。
您需要在首选项服务上调用
getDefaultBranch("")
,并在返回的对象上调用首选项方法,而不是直接在首选项服务上调用首选项方法。
要将首选项还原为默认值(由setIntPref()
设置),我发现在卸载时我必须执行this:
pref.clearUserPref("network.http.response.timeout")
此命令正常工作如果我在另一个test-addon中调用它。我只需找出How to implement a command, so it is executed when the firefox-addon is uninstalled?
那么我该如何理解这些评论呢?如何在"用户分支"?
中设置首选项答案 0 :(得分:1)
以下是我刚才的做法:
function clearPrefBranch(aPrefBranchName) {
var defaultBranch = Services.prefs.getDefaultBranch(null);
defaultBranch.deleteBranch(aPrefBranchName);
}
然后,只需使用clearPrefBranch
参数调用extensions.mypluginname
(假设您使用了命名约定,并且您应该能够删除所有扩展程序的已安装首选项。
修改强>:
我在main.js文件中使用的代码:
const {Cc,Ci,Cm,Cr,Cu} = require("chrome");
Cu.import("resource://gre/modules/Services.jsm");
exports.onUnload = function(aOptions, aCallbacks) {
MyPlugin.shutdown();
};
function clearPrefBranch(aPrefBranchName) {
var defaultBranch = Services.prefs.getDefaultBranch(null);
defaultBranch.deleteBranch(aPrefBranchName);
}
var MyPlugin = {
shutdown: function() {
prefLoader.clearPrefBranch('extensions.oopstab');
}
};
答案 1 :(得分:1)
我解决了第二部分(卸载),在我的main.js
中,我在最后添加了此代码:
exports.onUnload = function(reason) {
//called when add-on is
// uninstalled
// disabled
// shutdown
// upgraded
// downgraded
pref.clearUserPref("network.http.response.timeout");
};
用于禁用和卸载附加组件。