首页 > 解决方案 > 如何从 Firefox 插件中读取配置文件首选项?

问题描述

我正在这样做(Firefox 66.0.5,MacOS):

var prefs = Components.classes['@mozilla.org/preferences-service;1']
  .getService(Components.interfaces.nsIPrefBranch);
var x = pref.getCharPref('extensions.foo.x');

我得到这个:

JavaScript error: moz-extension://9390a488-d749-d140-91b6-fb1b2a86053f/foo.js,
line 1: TypeError: Components.classes is undefined

阅读个人资料偏好的正确方法是什么?

我试过这个:

var prefs = Components.classesByID['@mozilla.org/preferences-service;1']
  .getService(Components.interfaces.nsIPrefBranch);

得到了这个:

JavaScript error: moz-extension://ebac8f96-717d-0c4b-b2d3-a7d6f3515843/auth.js,
line 1: TypeError: Components.classesByID is undefined

标签: firefoxfirefox-addon

解决方案


WebExtensions对用户偏好进行更改的能力非常有限。browserSettings您可以通过API影响一些,目前是 14 个。还有其他一些通过其他 WebExtension API(例如)有效地proxy改变了,但没有直接改变。不幸的是,没有直接的方法可以从 WebExtension 读取或设置用户首选项。直接调整用户偏好的功能仅适用于较旧样式的附加组件(自 Firefox 57 起已全部删除)。

至于您的使用Components和遇到的具体错误,请参阅我对无法在 WebExtensions 中使用组件的回答:获取“ReferenceError: Cu is not defined”</a> 以获取更多详细信息。在 WebExtension 中使用Components是不可能的。

我能想到在 Firefox 的发布版本中调整首选项的唯一方法是使用本机消息传递与您也安装的本机应用程序进行通信。在 Firefox 退出/停止/关闭后,本机应用程序可以读取和更改配置文件目录中正在运行的 Firefox 配置文件的配置文件。然后它可以重新启动 Firefox。

在 Firefox 的 Nightly 和 Developer Edition 版本中,应该仍然可以使用WebExtensions Experiment,这将允许您使用Components界面进行所需的偏好更改。但是,如果这是您想要公开分发的扩展,那么这不是一个可行的解决方案。


推荐阅读