Files
呈祥 7e2830722e 新增 URL 重定向功能并修复若干问题
- 新增 Redirect(URL 重定向):+ 菜单可添加,支持静态跳转(redirect.url)
  与正则捕获替换(regexSubstitution);界面加 Redirects 区块与样式
- 修复重定向/头对页面导航不生效:DNR 规则显式声明 resourceTypes 含 main_frame
- URL 过滤/重定向去掉强制 ^ 锚定,改为子串匹配,无需手写协议头
- 重定向与 Filter 解耦,仅由自身 from 决定生效
- 修复 angular.lowercase 报错(AngularJS 1.7 已移除该 API)
- README 补充重定向功能与用法说明
2026-07-10 17:15:21 +08:00

93 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ModHeaderManifest 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 值后**追加**(拼接 / 逗号拼接)
- **导出 / 导入** ProfileJSON
- **克隆** 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 WorkerDNR 规则生成、角标、右键菜单
├── 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** 许可。