一、Manifest V3 全面落地的时代背景
2026年,Chrome 已彻底停止对 Manifest V2 扩展的支持,所有旧版扩展无法再在新版浏览器中运行。这意味着开发者必须将存量项目全部迁移至 Manifest V3,新扩展也只能基于 V3 规范开发。
这次规范升级的核心目标是提升扩展安全性、减少资源占用、保护用户隐私,但也给开发者带来了不少适配挑战:后台页面被 Service Worker 替代,远程代码执行被严格禁止,网络请求拦截能力被新的 Declarative Net Request API 重构。很多过去在 Manifest V2 中成熟的开发模式,在 V3 中已经完全不可用。
二、Manifest V3 核心配置文件详解
Manifest V3 的配置文件从版本号开始就有了本质变化,最基础的配置结构如下:
json
{
"manifest_version": 3,
"name": "示例扩展",
"version": "1.0.0",
"description": "2026 年 Manifest V3 示例扩展",
"permissions": ["storage", "tabs", "scripting"],
"host_permissions": ["<all_urls>"],
"background": {
"service_worker": "background.js"
},
"action": {
"default_popup": "popup.html",
"default_icon": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
}
}
}
和 Manifest V2 相比,最关键的几个变化点:
- manifest_version 必须设为 3 ,否则扩展无法在新版 Chrome 中加载
- background 字段不再支持 persistent 持久化页面 ,只能使用 service_worker
- host_permissions 从 permissions 中独立拆分出来 ,网站访问权限单独声明
- browser_action 和 page_action 合并为 action,统一管理扩展图标与弹窗
三、Service Worker 替代后台页面的实战要点
Manifest V3 中最大的开发模式转变,就是用 Service Worker 替代了过去持久运行的 background 页面。它没有 DOM 环境,生命周期是事件驱动的,闲置一段时间后会被浏览器自动终止。
这带来了两个最常见的坑点:
1. 全局变量无法持久保存 :Service Worker 重启后所有内存中的变量都会丢失,必须用 chrome.storage.local 来持久化状态数据
2. 长连接任务容易被中断 :超过30秒没有事件响应,Service Worker 就可能被回收,长耗时任务需要用 chrome.alarms 来唤醒恢复
正确的状态持久化写法示例:
javascript
// 启动时从存储中恢复状态
chrome.storage.local.get('taskState', (result) => {
global.taskState = result.taskState || {};
});
// 状态变更后立即写入存储
function updateTaskState(key, value) {
global.taskState[key] = value;
chrome.storage.local.set({ taskState: global.taskState });
}
四、内容脚本与消息通信的新规范
Manifest V3 中内容脚本的注入方式也有了优化,现在可以通过 world 字段指定注入的隔离级别:
ISOLATED :默认模式,和页面的 JS 环境完全隔离,不会污染页面全局变量
MAIN :直接注入到页面的主 JS 上下文,可以访问页面的全局变量和函数
跨上下文的消息通信依然使用 chrome.runtime.sendMessage,但要注意 Service Worker 被回收后,消息监听函数需要重新注册,不能依赖旧版中后台页面常驻的通信逻辑。
五、Declarative Net Request 替代 webRequest 拦截
Manifest V3 中彻底移除了可修改请求体的阻塞式 webRequest API,取而代之的是声明式的 declarativeNetRequest API。开发者不再能在 JS 代码中动态拦截和修改所有请求,而是需要预先定义规则,由浏览器内核直接执行拦截、重定向、修改头信息等操作。
这种模式的好处是性能大幅提升,不会因为扩展逻辑拖慢页面加载速度;但缺点是动态规则的数量有上限,免费配额下普通扩展最多只能添加 100 条动态规则,复杂的广告拦截类扩展需要申请更高的配额权限。
六、扩展商店审核2026年最新避坑指南
现在 Chrome 网上应用店的审核规则比 Manifest V2 时代严格很多,以下几个高频拒审点一定要提前规避:
❌ 禁止任何形式的远程代码执行,不能从远程服务器拉取 JS 代码并在扩展中执行
❌ 权限声明必须最小化,申请的权限必须和扩展核心功能直接相关,不能为了方便申请多余权限
❌ 扩展描述中不能出现误导性宣传,不能暗示自己是官方工具,也不能使用未经授权的品牌名称
✅ 所有收集用户数据的功能,必须在隐私政策中明确说明用途,提供可访问的隐私政策链接
七、迁移 Manifest V3 的分步落地建议
如果你的项目还在使用 Manifest V2,可以按这个稳妥的步骤完成迁移:
先把 manifest_version 字段升级为 3,调整配置文件结构,替换所有废弃字段
把旧的 background 页面逻辑迁移到 Service Worker,用 storage 替代全局变量持久化状态
把所有阻塞式 webRequest 逻辑替换为 declarativeNetRequest 规则
本地加载扩展做全量功能测试,重点验证后台任务在 Service Worker 重启后是否能正常恢复
提交扩展前用官方的扩展合规检测工具扫描一遍,提前发现潜在的拒审风险点
八、小结
Manifest V3 不是 Manifest V2 的简单升级,它彻底重构了 Chrome 扩展的运行模型。虽然初期适配会遇到不少坑,但完成迁移后,扩展的内存占用会大幅降低,运行稳定性和安全性也会显著提升。2026年所有存量扩展都必须完成迁移,提前吃透新规范,就能避免后续被浏览器强制停用的风险。