【问题标题】:How to read profile preferences from Firefox add-on?如何从 Firefox 插件中读取配置文件首选项?
【发布时间】:2019-12-03 18:33:40
【问题描述】:

我正在这样做(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

【问题讨论】:

    标签: firefox firefox-addon


    【解决方案1】:

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

    关于您对Components 的使用以及您遇到的具体错误,请参阅我对Unable to use Components in WebExtensions: get “ReferenceError: Cu is not defined” 的回复以获取更多详细信息。在 WebExtension 中使用 Components 是不可能的。

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

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

    【讨论】:

    • 知道了,感谢详细解答。也许你也可以帮助我? stackoverflow.com/questions/57206940/…
    • @yegor256 我对 Selenimum 不太熟悉,所以我不太适合这个问题。不幸的是,与旧的附加组件类型相比,WebExtensions 非常受限。可能无法获得该信息。
    • 也许您能想到任何其他可能的方式来从命令行(firefox 的启动位置)向插件发送信息?
    猜你喜欢
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多