【问题标题】:nsIPrefBranch for Firefox for android extension returns NS_ERROR_UNEXPECTEDnsIPrefBranch for Firefox for android 扩展返回 NS_ERROR_UNEXPECTED
【发布时间】:2013-09-11 00:57:10
【问题描述】:

我想在我的扩展(android ext 的 firefox)的首选项中存储一个值。所以,在 prefs.js 文件(在 defaults/preferences/ 下)我写:

pref("extensions.trackdetect.idUser","nothing");

然后,在 boostrap.js 中,我得到了偏好分支:

var prefs = Components.classes["@mozilla.org/preferences-service;1"]
                .getService(Components.interfaces.nsIPrefService).getBranch("extensions.trackdetect.");

但是,当我尝试像这样获取 idUser 值时:

var idPref = prefs.getCharPref("idUser");

我收到此错误:`

Exception... "Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [nsIPrefBranch.getCharPref]"  nsresult: "0x8000ffff (NS_ERROR_UNEXPECTED)"

This post 解释了错误的来源,但我的偏好设置如下所示,所以我不明白问题所在。

【问题讨论】:

标签: android firefox-addon firefox-addon-sdk xpcom


【解决方案1】:

Bootstrapped (restartless) 加载项不支持通过 defaults/preferences 进行自动首选项。相应地设置默认首选项是您的引导代码的责任。

由于您的自动首选项从未加载,getCharPref() 调用必须失败。

您需要get the default branch and seed your preferences。一个简单的方法是:

const PREF_BRANCH = "extensions.myaddon.";
const PREFS = {
  someIntPref: 1,
  someStringPref: "some text value"
};

function setDefaultPrefs() {
  let branch = Services.prefs.getDefaultBranch(PREF_BRANCH);
  for (let [key, val] in Iterator(PREFS)) {
    switch (typeof val) {
      case "boolean":
        branch.setBoolPref(key, val);
        break;
      case "number":
        branch.setIntPref(key, val);
        break;
      case "string":
        branch.setCharPref(key, val);
        break;
    }
  }
}

function startup(aData, aReason) {
  // Always set the default prefs as they disappear on restart
  setDefaultPrefs();
  ...
}

还有其他选择,比如使用mozISubscriptLoaderSandboxes,但我真的没有可以轻松复制的独立代码。

【讨论】:

  • 感谢 nmaier 的回复,在这种情况下,根据 Mark 的文章,会话结束后首选项将消失。但是,我希望它是永久性的。此外,还有一个使用自动首选项的扩展"Lock",它工作得很好,所以我觉得这很奇怪。
  • 只有默认首选项消失。如果用户或代码将其设置为非默认值,则偏好确实会保留。 (注意getBranch()getDefaultBranch() 之间的区别我发布的代码实际上足以让它工作。实际上,非引导扩展的加载器将与上面defaults/preferences/*.js 的代码基本相同。并且“锁定”插件在这方面被破坏了。我在我的答案中添加了一个指向有问题的错误的链接。
  • 感谢 Nils 的解释,我尝试了您的代码,它运行良好。再次感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2013-01-29
  • 2021-08-12
  • 2013-12-02
  • 1970-01-01
相关资源
最近更新 更多