在用户分支中设置首选项,并在卸载时取消设置

时间:2014-06-01 22:43:25

标签: firefox-addon-sdk

我使用以下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?

那么我该如何理解这些评论呢?如何在"用户分支"?

中设置首选项

2 个答案:

答案 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");
};

用于禁用和卸载附加组件。