7e2830722e
- 新增 Redirect(URL 重定向):+ 菜单可添加,支持静态跳转(redirect.url) 与正则捕获替换(regexSubstitution);界面加 Redirects 区块与样式 - 修复重定向/头对页面导航不生效:DNR 规则显式声明 resourceTypes 含 main_frame - URL 过滤/重定向去掉强制 ^ 锚定,改为子串匹配,无需手写协议头 - 重定向与 Filter 解耦,仅由自身 from 决定生效 - 修复 angular.lowercase 报错(AngularJS 1.7 已移除该 API) - README 补充重定向功能与用法说明
93 lines
4.3 KiB
Markdown
93 lines
4.3 KiB
Markdown
# 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 重定向**(Redirect):支持静态跳转和正则捕获替换
|
||
- 按 **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`)
|
||
- **Redirect**:添加 URL 重定向规则
|
||
- **Filter**:添加生效条件(URL 正则或资源类型)
|
||
3. 勾选每行左侧的复选框以**启用**该条修改;填写 Name / Value。
|
||
4. 打开目标网站并刷新,在 DevTools 的 **Network** 面板中即可确认头已被修改。
|
||
5. 图标上的**数字角标**表示当前生效的 header 数量。
|
||
|
||
### URL 重定向说明
|
||
|
||
在 **+ → Redirect** 添加一条规则,填「Redirect from」和「Redirect to」:
|
||
|
||
- **静态跳转**:from 填匹配的正则(如 `https://old\.com/.*`),to 填目标 URL(如 `https://new.com/`)。
|
||
- **正则捕获替换**:from 里用捕获组 `(...)`,to 里用 `\1`、`\2` 引用。
|
||
例如 from = `^https://old\.com/(.*)`,to = `https://new.com/\1`,会把路径原样带过去。
|
||
- from 是正则、**子串匹配**(不强制从头匹配)。真实 URL 含协议头(如
|
||
`http://localhost:5173/...`),所以写 `localhost:5173/.*` 即可,无需写协议;
|
||
如需从头匹配可自行加 `^`(注意那样要带上 `https?://`)。
|
||
|
||
### 生效范围说明
|
||
|
||
- **不加 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** 许可。
|