Chrome 迁移到 Manifest V3 后扩展如何使用 declarativeNetRequest:规则集更新与权限边界
把 Chrome 扩展从 Manifest V2 迁到 Manifest V3 时,最容易卡住的地方不是把 background 改成 service worker,而是原来依赖 webRequestBlocking 的网络规则没有了直接平替。现在更稳妥的做法,是把“匹配什么请求、采取什么动作”写成 declarativeNetRequest 规则交给浏览器评估,再用 updateDynamicRules 管理确实需要运行时变化的部分。
如果扩展只需要拦截或升级请求,先采用
declarativeNetRequest;只有重定向、改请求头等场景,才继续核对host_permissions,不要把所有站点权限一并放进清单。
- Manifest V3 的静态规则放在
declarative_net_request.rule_resources,动态规则通过updateDynamicRules持久保存。 declarativeNetRequest可用于阻止和升级请求;重定向或修改请求头时,还要检查目标 URL 与发起方的主机权限。- 规则优先级先影响匹配结果,动态、会话和静态规则的跨浏览器优先级不要当成可移植契约。
- 迁移验收至少包含规则载入、权限提示、请求结果和扩展更新后的持久性四项检查。
Manifest V3 为什么把网络规则交给 declarativeNetRequest
Manifest V3 的变化有两个相互关联的方向:后台上下文改为按需唤醒的 service worker,远程托管代码不再允许由扩展运行;网络请求修改则从“每次请求通知扩展进程”转向“浏览器根据声明式规则直接评估”。这降低了扩展长期占用资源和读取用户网络请求的机会,但也意味着规则不能再随意用 JavaScript 临场计算。
对迁移项目来说,先把需求分成两类更实际:阻止、升级 HTTPS 这类规则通常可以直接落到 declarativeNetRequest;重定向、修改请求头则要同时核对请求 URL 和 initiator 的访问范围。MDN 对权限提示和 host permissions 的区分写得很清楚,不能只看规则本身能否载入。

最小规则集:从 manifest.json 到第一次请求匹配
先用静态规则验证迁移方向。目录中准备 manifest.json 和 rules.json,清单只声明必要权限:
{
"manifest_version": 3,
"name": "Request Guard",
"version": "1.0.0",
"permissions": ["declarativeNetRequest"],
"declarative_net_request": {
"rule_resources": [{
"id": "ruleset_main",
"enabled": true,
"path": "rules.json"
}]
}
}
rules.json 只做一个容易验收的动作,例如阻止指定域名下的图片请求:
[
{
"id": 1,
"priority": 1,
"action": {"type": "block"},
"condition": {
"urlFilter": "||cdn.example.test/",
"resourceTypes": ["image"]
}
}
]
这里的 example.test 只是测试域名,不代表真实业务站点。加载未打包扩展后,用开发者工具 Network 面板观察匹配请求,再回到 chrome://extensions 的扩展详情确认没有额外权限提示。规则中的 id 必须在规则集内唯一,priority 至少为 1。
动态规则更新:updateDynamicRules 解决什么问题
静态规则适合随扩展版本发布的基线;用户在选项页增加过滤域名、或者策略服务下发小批量变更时,才需要动态规则。动态规则跨浏览器会话和扩展更新保持,代码要同时提供新增与删除的 id,避免每次更新都把历史规则叠加一遍。
const newRule = {
id: 1001,
priority: 1,
action: { type: "block" },
condition: {
urlFilter: "||ads.example.test/",
resourceTypes: ["script"]
}
};
chrome.declarativeNetRequest.updateDynamicRules({
removeRuleIds: [1001],
addRules: [newRule]
});
这个写法的关键不是 API 调用本身,而是“先移除同 id,再添加新版本”的更新语义。生产扩展还应在回调或 Promise 结果中记录失败原因,并在选项页保留当前规则的可见状态。不要把服务端返回的任意 JSON 原样变成规则,至少先限制 action、resourceTypes、域名和规则数量。

host_permissions 什么时候必须补上
权限边界取决于动作,不取决于“我已经申请了 declarativeNetRequest”这一句话。阻止或升级请求通常可以只申请 declarativeNetRequest;如果规则要重定向,或者要修改请求头,就必须检查对应请求 URL 的 host permissions。除导航请求外,发起该请求的 initiator 也会影响权限判断。
| 需求 | 优先检查 | 验收现象 |
|---|---|---|
| 阻止请求 | declarativeNetRequest | 匹配资源被取消或不再加载 |
| 升级 scheme | 规则条件与目标请求 | HTTP 请求转为 HTTPS |
| 重定向 | host_permissions 与目标资源 | 地址进入预期目标且无循环 |
| 修改请求头 | 请求 URL、initiator 与 header 操作 | 服务端收到预期字段 |
权限越宽,用户越难判断扩展在做什么。迁移时可以先用最窄的域名和动作做一组未打包测试,再逐项增加范围。若某个需求必须依赖可编程判断,要重新评估它是否真的适合声明式规则,而不是偷偷保留旧的阻塞式拦截假设。
规则优先级与兼容处理别混在一起
同一扩展内,规则先按 priority 判断;动作类型也有明确的处理顺序。不要仅凭“动态规则一定覆盖静态规则”来写跨浏览器逻辑,MDN 已提示不同浏览器对规则集来源优先级的保证并不相同。兼容层更应该围绕结果写:在测试浏览器中调用可用的匹配测试能力,记录命中规则、最终动作和未命中的原因。
如果目标是 Chrome 扩展,回归表至少覆盖 Manifest V3 加载、静态规则命中、动态规则替换、扩展更新后规则是否仍在、权限提示是否收敛,以及重定向或改头场景下的 initiator 权限。只测“扩展能安装”是不够的,安装成功并不代表规则真的被浏览器接受。
常见问题
declarativeNetRequest 能完全替代 webRequest 吗?
不能。它适合声明式的阻止、升级、重定向和部分请求头修改;需要在每次请求到来时运行任意 JavaScript 判断的场景,仍要重新设计能力边界。
动态规则会在 Chrome 重启后消失吗?
动态规则设计为跨浏览器会话持久保存,也能跨扩展更新保留。仍应把规则版本和更新失败写入扩展自己的诊断记录,方便确认实际状态。
为什么规则载入了,但重定向没有发生?
先核对重定向动作需要的主机权限,再检查请求的 initiator、资源类型和规则优先级。只声明阻止请求所需的权限,不会自动获得重定向所需的权限。
迁移时要不要把所有 host_permissions 都加上?
不建议。按实际动作和域名收敛权限,先在未打包扩展中观察权限提示与规则命中,再逐步放大范围。
落地前的四项验收
- 清单验收:
manifest.json的规则集 id、路径和权限与需求一致。 - 行为验收:用 Network 面板确认阻止、升级或重定向确实发生,而不是只看扩展图标。
- 更新验收:重复调用
updateDynamicRules后没有重复 id,扩展更新和浏览器重启后规则状态符合预期。 - 权限验收:针对重定向和请求头修改逐项核对
host_permissions与 initiator,不用通配权限掩盖设计问题。
Manifest V3 的迁移重点,是把“脚本拦截请求”改成“浏览器按声明评估规则”。先用小规则集跑通,再逐项确认动态更新、权限和兼容边界,通常比直接搬运旧后台页更容易定位问题。
Go archive/zip.Writer 如何复制文件条目:CreateHeader、写入顺序与 CRC 校验
- 上一篇
- Go archive/zip.Writer 如何复制文件条目:CreateHeader、写入顺序与 CRC 校验
- 下一篇
- Chrome 152 相对 alpha 颜色进入稳定版:CSS 主题透明度写法与兼容判断
-
- 科技周边 · 业界新闻 | 1小时前 | css · chrome · 前端开发 · Web平台 · Chrome 152 CSS alpha() 相对颜色 前端新闻
- Chrome 152 相对 alpha 颜色进入稳定版:CSS 主题透明度写法与兼容判断
- 387浏览 收藏
-
- 科技周边 · 业界新闻 | 2小时前 | Windows · 命令行 · 开发工具 · 微软 · WinUI · Windows开发 WinUI 3 Windows App Development CLI WinApp CLI find-ui
- Windows App Development CLI 0.6.0 有哪些变化:从模板脚手架到 find-ui 工作流
- 143浏览 收藏
-
- 科技周边 · 业界新闻 | 3小时前 | css · chrome · Web平台 · 浏览器更新 · 桌面应用 · CSS 标题栏 Chrome 152 window-drag 桌面Web应用
- Chrome 152 的 window-drag CSS 属性怎么用:桌面 Web 应用标题栏交互变化
- 486浏览 收藏
-
- 科技周边 · 业界新闻 | 5小时前 | atlassian · forge · 业界新闻 · Web Trigger · REST API Atlassian Forge Web Trigger Container Services
- Atlassian Forge Web Trigger 生命周期 API 上线:创建、轮换与删除如何接入服务
- 470浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 |
- Python 正式支持 RISC-V 平台意味着什么:解释器构建、发行版与项目验证
- 345浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 |
- Google Ads 2026 年 8 月 Demand Gen 新增消息入口与多模态视频制作:广告主该关注什么
- 486浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 | 开发者 · 人工智能 · 网络安全 · Hugging Face 模型安全 AI沙箱 联网隔离
- OpenAI披露Hugging Face事件后,AI沙箱为什么必须把联网能力单独隔离
- 298浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 | 云原生 · 监控 · kubernetes · 业界新闻 · HPA · HPA Kubernetes v1.37 metrics.k8s.io Metrics API
- Kubernetes v1.37 让 metrics.k8s.io API 进入 Stable:升级后如何核对 HPA 依赖
- 225浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 5424次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 4911次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 4834次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 5097次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 5056次使用
-
- Go 内网管理接口为什么在 Chrome 142 打不开:Local Network Access、HTTPS 与 CORS 排查
- 2026-07-18 152浏览
-
- 前甲骨文工程师发文“诋毁”MySQL:“糟糕透顶!强烈推荐 Postgres”?真相却令人吃惊
- 2023-02-16 488浏览
-
- HarmonyOS 3 开发者预览版发布;Chrome 95 发布;MySQL 8.0.27 GA 发布 | 思否周刊
- 2023-01-26 368浏览
-
- Django 20200407 博客开发 001
- 2023-01-19 337浏览
-
- Tshare校园资源分享平台(网站开发三之数据库连接)
- 2023-02-16 144浏览

