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

如何将Manifest V2背景脚本适配为Manifest V3单Service Worker?

Manifest V2 背景脚本迁移到 Manifest V3 单 Service Worker 适配方案

核心修改要点

Manifest V3 不再支持多背景脚本,仅允许单个 Service Worker,同时原 chrome.tabs.executeScript API 已被废弃,需替换为 chrome.scripting.executeScript,还要补充必要的权限配置。


1. 修正 Manifest V3 配置

将原多脚本的背景配置改为单 Service Worker,并添加所需权限:

{
  "manifest_version": 3,
  "name": "你的扩展名称",
  "version": "1.0",
  // 必须声明的权限
  "permissions": ["webRequest", "scripting", "tabs"],
  // 替换为你实际需要监听的URL规则,对应原代码中的"ETC..."
  "host_permissions": ["https://example.com/*", "https://another-domain.com/*"],
  "background": {
    "service_worker": "sw.js"
  }
}

2. 重构 Service Worker 监听代码

将原两个背景脚本的监听逻辑合并到 sw.js 中,替换废弃的 API:

方案一:合并为单个监听(更简洁)

chrome.webRequest.onCompleted.addListener(details => {
  // 仅处理POST请求
  if (details.method !== "POST") return;

  // 根据URL规则匹配对应的注入脚本
  if (details.url.includes("匹配第一个脚本的URL特征")) {
    chrome.scripting.executeScript({
      target: { tabId: details.tabId },
      files: ["script.js"]
    }).catch(err => console.error("注入script.js失败:", err));
  } else if (details.url.includes("匹配第二个脚本的URL特征")) {
    chrome.scripting.executeScript({
      target: { tabId: details.tabId },
      files: ["scriptTwo.js"]
    }).catch(err => console.error("注入scriptTwo.js失败:", err));
  }
}, { urls: ["*://*/*"] }); // 替换为你实际需要的URL范围

方案二:保留独立监听(逻辑更清晰)

// 对应原第一个监听逻辑
chrome.webRequest.onCompleted.addListener(details => {
  if (details.method !== "POST") return;
  chrome.scripting.executeScript({
    target: { tabId: details.tabId },
    files: ["script.js"]
  }).catch(err => console.error(err));
}, { urls: ["第一个URL规则"] });

// 对应原第二个监听逻辑
chrome.webRequest.onCompleted.addListener(details => {
  if (details.method !== "POST") return;
  chrome.scripting.executeScript({
    target: { tabId: details.tabId },
    files: ["scriptTwo.js"]
  }).catch(err => console.error(err));
}, { urls: ["第二个URL规则"] });

关键注意事项

  • 原 swTwo.js 中的逻辑需要全部合并到 sw.js 中,Manifest V3 不支持加载多个 Service Worker
  • chrome.scripting.executeScript 必须指定 target.tabId,且需要在 manifest 中声明 scripting 权限
  • host_permissions 必须覆盖你要监听的所有 URL,否则 webRequest 监听会无权限触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:52:55