You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firefox扩展能否访问Services.prefs?如何读写about:config配置项

问题解决指南

核心问题原因

Services.prefs是Firefox的XPCOM组件接口,仅能在浏览器特权环境(比如你手动操作的浏览器控制台)或传统XUL/bootstrapped扩展中使用。而你开发的是基于WebExtensions标准的扩展(manifest v2),运行在沙箱环境里,无法直接访问这类非标准的特权接口,因此会抛出ReferenceError: Services is not defined。

正确解决方案

要读写network.trr.mode(DoH模式),需使用Firefox官方提供的WebExtensions标准API——browser.privacy.network.dnsOverHttps,具体步骤如下:

1. 更新manifest.json权限

添加"privacy"权限(原browserSettings权限可保留,若无需其他浏览器设置操作也可移除):

{
  "manifest_version": 2,
  "name": "MyName",
  "version": "1.0",
  "description": "MyDescription",
  "permissions": [
    "privacy"
  ]
}

2. 修改background.js代码

通过privacyAPI获取并反转DoH模式值:

function changeDOH() {
  console.log("Toolbar button was clicked.");
  // 获取当前DoH模式
  browser.privacy.network.dnsOverHttps.get({}).then(result => {
    const currentMode = result.value.mode;
    console.log("当前DOH模式: " + currentMode);
    // 反转值:0↔1
    const newMode = currentMode === 0 ? 1 : 0;
    // 设置新的DoH模式
    browser.privacy.network.dnsOverHttps.set({
      value: { mode: newMode }
    }).then(() => {
      console.log("DOH模式已切换为: " + newMode);
    }).catch(err => {
      console.error("切换模式失败: ", err);
    });
  }).catch(err => {
    console.error("获取模式失败: ", err);
  });
}

browser.browserAction.onClicked.addListener(changeDOH);

补充说明

  • 并非所有about:config中的偏好都有对应的WebExtensions API,若需操作无对应API的偏好,manifest v2可考虑使用browser.experiments.settings(需开启Firefox的扩展实验功能),但该方式非标准且可能在后续版本中被移除;manifest v3则完全不支持这类非标准操作。
  • Services.prefs无法在WebExtensions环境中使用,无论manifest v2还是v3,都必须依赖官方提供的标准API来操作浏览器设置。

内容的提问来源于stack exchange,提问作者Shtole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 05:24:51