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

Firefox Manifest V3扩展仅点击弹窗才注入内容脚本的原因排查

Firefox 111中Manifest V3扩展内容脚本延迟注入问题排查

问题描述

我开发的Manifest V3扩展在Chrome、Edge等浏览器中运行正常,但在Firefox 111里,只有打开弹窗窗口后才会注入内容脚本。我需要它在每次页面加载时自动注入,而且弹窗里根本没有触发内容脚本的代码,修改manifest.json也没效果。目前是通过about:debugging在FF 111中临时安装的扩展。

当前manifest.json配置

{
  "name": "XXX",
  "version": "0.5.0",
  "manifest_version": 3,
  "author": "Benny Nissen",
  "content_security_policy": {
    "extension_pages": "default-src 'self'; script-src 'self'; object-src; img-src 'self' data: blob:;"
  },
  "description": "Bla, bla,homepage_url: https://xxx.xx",
  "icons": {
    "16": "icons/key_icon16.png",
    "48": "icons/key_icon48.png",
    "128": "icons/key_icon128.png"
  },
  "options_ui": {
    "page": "src/browser_action/options.html",
    "open_in_tab": true
  },
  "default_locale": "en",
  "background": {
    "//service_worker_is_for_chrome_and_scripts_is_for_ff": "stupidity - but please      remove/add relevant //",
    "//service_worker": "src/bg/background.js",
    "scripts": [
      "js/lib/jserror/jserror.js",
      "js/lib/lang/languagedb.js",
      "js/lib/pcrypt.js",
      "js/lib/pcryptapi.js",
      "js/lib/other/prototypes.js",
      "js/lib/other/php.js",
      "js/lib/forge.min.js",
      "js/lib/elliptic.min.js",
      "js/lib/srp6a/thinbus-srp-config.js",
      "js/lib/srp6a/thinbus-srp6a-sha256-versioned.js",
      "js/pcrypt_extension.js",
      "js/pcrypt_shared.js",
      "src/bg/background.js"
    ]
  },
  "action": {
    "default_icon": {
      "16": "icons/key_icon16.png",
      "48": "icons/key_icon48.png",
      "128": "icons/key_icon128.png"
    },
    "default_title": "Password Crypt",
    "default_popup": "src/browser_action/popup.html"
  },
  "permissions": [
    "notifications",
    "geolocation",
    "storage",
    "clipboardWrite",
    "tabs",
    "<all_urls>"
  ],
  "host_permissions": [
    "<all_urls>"
  ],
  "content_scripts": [
    {
      "matches": [
        "<all_urls>"
      ],
      "exclude_matches": [
        "https://*.facebook.com/settings*"
      ],
      "js": [
        "src/inject/inject.js"
      ],
      "run_at": "document_start"
    },
    {
      "matches": [
        "https://facebook.com/settings*",
        "https://www.facebook.com/settings*"
      ],
      "all_frames": true,
      "js": [
        "src/inject/inject.js"
      ],
      "run_at": "document_start"
    }
  ],
  "web_accessible_resources": [
    {
      "resources": [
        "icons/chevron-left.svg",
        "icons/eye.svg",
        "icons/key.svg",
        "icons/key_icon.png",
        "icons/link.svg",
        "icons/settings.svg",
        "icons/settings_black.svg",
        "icons/user.svg"
      ],
      "matches": [
        "<all_urls>"
      ]
    }
  ]
}

原因分析与解决方案

1. Firefox扩展休眠机制

Firefox会对长时间未交互的Manifest V3扩展进行休眠,导致内容脚本无法自动注入。点击弹窗相当于唤醒了扩展,因此之后内容脚本能正常运行。

解决办法:在背景脚本background.js中添加标签页监听事件,强制保持扩展活跃:

// 监听标签页加载事件,防止扩展休眠
chrome.tabs.onUpdated.addListener((tabId, changeInfo) => {
  if (changeInfo.status === 'loading') {
    // 无需实际操作,仅触发扩展活跃状态
  }
});

2. Content Security Policy (CSP) 语法错误

你的CSP配置中object-src字段未指定值,Firefox对CSP语法要求更严格,这可能导致扩展初始化异常。

解决办法:修正CSP配置,将object-src改为object-src 'none';:

"content_security_policy": {
  "extension_pages": "default-src 'self'; script-src 'self'; object-src 'none'; img-src 'self' data: blob:;"
}

3. Manifest V3兼容性问题

Firefox 111对Manifest V3的支持仍在完善阶段,背景脚本加载过多可能导致初始化延迟,阻塞内容脚本注入。

解决办法:

  • 暂时简化背景脚本,只保留必要代码,测试是否能正常注入内容脚本;
  • 尝试将run_at从document_start改为document_idle,看是否能绕过时机限制。

4. 临时安装的调试限制

通过about:debugging临时安装的扩展可能存在调试模式下的行为差异,比如延迟激活。

解决办法:将扩展打包为.xpi文件正常安装,验证问题是否依然存在。

5. 权限配置验证

虽然你已添加<all_urls>,但Firefox对Manifest V3的权限匹配可能更严格,可尝试将host_permissions改为明确的协议范围:

"host_permissions": [
  "http://*/*",
  "https://*/*"
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:00:05