二次开发指南
本页面向希望从源码构建、调试、理解或扩展 JavdBviewed 的开发者。相比用户文档,这里更关注代码结构、模块职责、开发流程与排查思路。
建议阅读顺序
你会在这里解决什么问题
- 如何把项目跑起来并加载到浏览器里
- 代码大致分成哪些层,功能应该放在哪里
- 页面脚本和后台脚本如何通信
- 数据存放在哪里,同步链路怎么走
- 新增一个功能时,通常从哪几层下手
开发环境
系统要求
Node.js18 或更高版本npm9 或更高版本,或使用pnpmGit- 推荐使用
VS Code
克隆项目
git clone https://github.com/JavdBviewed/JavdBviewed.git
cd JavdBviewed安装依赖
pnpm install如果你习惯使用 pnpm,也可以自行切换,但请优先确保与当前仓库脚本保持一致。
构建扩展
pnpm run build构建完成后,产物会输出到 dist/。
加载到浏览器
- 打开浏览器扩展管理页面
- 开启“开发者模式”
- 点击“加载已解压的扩展程序”
- 选择仓库中的
dist/目录
常见入口:
- Chrome:
chrome://extensions/ - Edge:
edge://extensions/
项目结构
下面是理解项目时最值得先掌握的一层结构,而不是完整文件清单。
JavdBviewed/
├── src/
│ ├── background/ # 后台脚本与消息分发
│ ├── content/ # 页面注入脚本与页面增强
│ ├── popup/ # 扩展弹窗
│ ├── dashboard/ # 设置面板与管理页面
│ ├── services/ # 业务服务层
│ ├── components/ # 通用组件
│ ├── utils/ # 工具方法与配置
│ ├── types/ # 类型定义
│ └── assets/ # 静态资源
├── public/ # 扩展静态资源
├── scripts/ # 构建脚本
├── dist/ # 扩展构建产物
└── package.json # 脚本与依赖定义模块分层怎么理解
如果你要新增功能,先判断自己改的是哪一层,会省很多时间。
content/:页面侧能力
适合放这些内容:
- 页面识别与初始化
- 详情页、列表页增强
- 按钮、标记、浮层、快捷操作
- 页面内状态刷新
一句话理解:凡是“直接显示在站点页面上”的,大概率先看这里。
background/:后台中枢
适合放这些内容:
- 统一消息监听与路由
- 数据读写
- 同步任务
- 外部接口调用
- 长生命周期任务管理
一句话理解:凡是“需要统一调度、跨页面共享或不该放在页面上下文里”的,大概率放这里。
dashboard/:设置与管理界面
适合放这些内容:
- 设置项配置
- 番号库、演员库、任务列表等管理页面
- 数据展示与复杂交互
一句话理解:凡是“像一个管理后台”的界面逻辑,优先看这里。
services/:业务逻辑封装
适合放这些内容:
- 演员管理
- 同步服务
- 新作品检测
- 与具体业务强相关、但不属于单一页面的逻辑
一句话理解:当某段逻辑既不应该直接塞进页面,也不适合散落在后台入口里,就应该考虑抽成服务。
核心数据放在哪里
IndexedDB
用于存放结构化业务数据,例如:
- 视频标记记录
- 演员数据
- 新作品记录
- 需要检索、筛选、统计的本地数据
这类数据通常体量更大、结构更稳定、查询需求更多。
Chrome Storage
用于存放轻量配置,例如:
- 用户设置
- 功能开关
- 一些浏览器级别的本地配置
如果你不确定该放哪,先想这个数据是不是“业务主数据”。如果是,优先考虑 IndexedDB;如果只是设置项,优先考虑 Chrome Storage。
页面和后台如何通信
项目的一个关键点是:很多功能并不是页面自己单独完成的,而是页面脚本发消息给后台,再由后台执行业务逻辑。
常见流程:
- 用户在页面点击某个按钮
content脚本整理参数- 通过
chrome.runtime.sendMessage发给后台 background处理数据库、同步或外部请求- 处理结果回传页面
- 页面刷新显示状态
如果你遇到“按钮点了没反应”,通常要同时检查:
- 页面事件有没有触发
- 消息有没有发出去
- 后台有没有收到
- 后台处理是否报错
- 回传结果是否正确更新 UI
新增一个功能时的推荐步骤
下面是一条比较稳的路径。
1. 先明确功能归属
先判断:
- 是页面交互增强?
- 是后台任务?
- 是设置面板能力?
- 是一个跨模块业务服务?
先定位置,再动代码。
2. 先补类型,再写实现
如果功能涉及新数据结构或新消息类型,建议先补:
- 类型定义
- 消息类型
- 配置项类型
这样后面调试成本会更低。
3. 再接消息和存储
如果功能需要后台参与,优先把消息链路跑通:
- 页面发消息
- 后台收到并返回
- 页面能正确处理返回值
消息链路通了,再接数据库、同步或外部 API。
4. 最后补 UI 和设置
把最容易变动的界面层放在后面做,能减少来回返工。
调试建议
页面侧调试
适合排查:
- 按钮没出现
- 样式错位
- 页面状态没刷新
- 事件没有触发
可直接打开站点页面的 DevTools 查看 Console、Elements、Network。
扩展侧调试
适合排查:
- 后台消息没处理
- 数据没写入
- 同步没触发
- 外部接口失败
可以在浏览器扩展管理页面打开扩展的检查视图。
常见排查顺序
建议按这个顺序看:
- 页面上有没有入口
- 点击后页面日志是否正常
- 后台是否收到消息
- 后台处理是否报错
- 数据层是否成功写入
- UI 是否根据返回值刷新
构建与发布
本地构建
npm run build文档站预览
在 JavdBviewed-Docs 仓库根目录执行:
pnpm run dev文档站构建
pnpm run build发布建议
- 先本地验证关键流程
- 再构建扩展产物
- 再创建 GitHub Release
- 最后上传发布文件并更新说明
常见开发问题
构建失败
优先检查:
Node.js版本是否过低- 依赖是否安装完整
package.json脚本是否被改动- 是否有 TypeScript 报错
扩展能加载但功能不生效
优先检查:
- 是否加载了最新的
dist/ - 内容脚本是否真的注入到目标页面
- 消息通信是否中断
- 控制台是否有运行时错误
同步或外部服务异常
优先检查:
- 配置项是否保存成功
- 后台日志是否有错误
- 外部服务本身是否可访问
- 是否存在登录态、权限或网络问题