# ModHeader(Manifest V3 版) 一个用于**修改 HTTP 请求头和响应头**的浏览器扩展。 ## 项目来源 本项目 fork/整理自开源扩展 [ModHeader](https://github.com/hao1300/modheader)(原作者 Hao Nguyen,MIT 许可)。原始代码基于 **Manifest V2**,依赖已被 Chrome 废弃的阻塞式 `webRequest` API。 本仓库在其早期源码基础上做了以下改造: - **迁移到 Manifest V3**:后台页改为 Service Worker,请求/响应头修改改用 `declarativeNetRequest`(DNR)动态规则实现。 - **存储层迁移**:状态从 `localStorage` 迁移到 `chrome.storage.local`(MV3 的 Service Worker 无法访问 `localStorage`),并保留对旧数据的一次性自动迁移。 - **精简**:移除了云备份、捐赠、推广提示等无用功能与相关死代码、冗余资源。 前端仍保留原有的 AngularJS + Angular Material 界面。 ## 功能 - 增加 / 修改 / 删除**请求头**与**响应头** - 按 **URL 正则**或**资源类型**限定生效范围(Filter) - 多套 **Profile** 配置,可快速切换 - 给每条 header 添加**备注** - 按名称 / 值 / 备注**排序** - 在已有 header 值后**追加**(拼接 / 逗号拼接) - **导出 / 导入** Profile(JSON) - **克隆** Profile - **Tab 锁**:仅对指定标签页生效 - **暂停**:一键临时停用全部修改 ## 安装 / 本地开发 无需任何构建工具,直接加载 `src` 目录即可: 1. 浏览器打开 `chrome://extensions` 2. 打开右上角**开发者模式** 3. 点击**加载已解压的扩展程序**,选择本仓库的 `src` 目录 4. 修改代码后,回到该页面点扩展卡片上的**刷新(↻)**即可重新加载 ## 使用方法 1. 点击工具栏中的 ModHeader 图标打开弹窗。 2. 点右上角 **+**: - **Request header**:添加请求头(如 `User-Agent`、`Authorization` 等) - **Response header**:添加响应头(如 `Access-Control-Allow-Origin`) - **Filter**:添加生效条件(URL 正则或资源类型) 3. 勾选每行左侧的复选框以**启用**该条修改;填写 Name / Value。 4. 打开目标网站并刷新,在 DevTools 的 **Network** 面板中即可确认头已被修改。 5. 图标上的**数字角标**表示当前生效的 header 数量。 ### 生效范围说明 - **不加 Filter**:对所有 URL 生效。 - **URL Pattern**:填写正则(如 `https://example\.com/.*`),仅匹配的请求生效;多条之间为「或」的关系。 - **Resource Type**:仅对选中的资源类型(main_frame、xmlhttprequest 等)生效。 - **Tab 锁**:点弹窗中的 “Tab lock”,修改将只作用于当前标签页。 ## 目录结构 ``` src/ ├── manifest.json # MV3 清单 ├── background.js # Service Worker:DNR 规则生成、角标、右键菜单 ├── popup.html # 弹窗界面 ├── scripts/ │ ├── main.js # AngularJS 逻辑 + storage.local 适配层 │ └── angular*.min.js # AngularJS 1.7.8 及其模块(官方,MIT) ├── styles/ # 样式 ├── images/ # 图标 └── *.tmpl.html # 各对话框模板 ``` ## 已知限制 - `declarativeNetRequest` 的 `append` 操作对部分请求头有限制,遇到不支持的 header 时该规则会失败并在 Service Worker 控制台打印错误。 - Tab 锁通过 DNR 的 **session 规则** + `tabIds` 实现,浏览器重启后会失效(符合预期)。 ## 许可 沿用原项目的 **MIT** 许可。