firefox - 如何从 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
解决方案
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
界面进行所需的偏好更改。但是,如果这是您想要公开分发的扩展,那么这不是一个可行的解决方案。
推荐阅读
- r - 如何避免 R 中箱线图的标签/文本重叠?
- oracle - 使用“新”和“旧”值依赖关系重构 Oracle 触发器中的子句
- three.js - Three.js R105 - intersectObjects 不是函数,碰撞工作者
- python - 使用用户输入从类中调用函数
- neo4j - 是否有任何 Cypher 查询用于返回节点的所有属性但不包括特定属性?
- reactjs - 在 React 组件之间切换,在状态与 React 路由器之间切换
- python - sklearn,ValueError:即使我没有使用字符串,也无法将字符串转换为浮点数
- git - Git 在询问凭据时不允许我添加我的 github 密码
- python - 卡在 Project Euler #10
- azure - 无法通过服务构造连接到现有的 Azure 数据库