chore: 暂存更改

This commit is contained in:
naiy committed 2026-09-07 23:57:12 +08:00
1 parent 75678ac0a4
commit 20e7a6fc79
38 files changed
+8807 -1382

No files matched your search

+49 -9
View File
@@ -18,7 +18,7 @@
- **解锁章节**:网页端被屏蔽的章节可以正常阅读
- **漫画阅读**:图片章节支持懒加载,加密图片滚动到视口时自动解密
- **章内注释**:自动处理 EPUB footnote,悬浮查看或点击定位,末尾保留注释列表
- **字体反混淆**:还原网页自绘字体渲染的混淆文本,动态插入的内容同样生效
- **字体反混淆**:还原网页自绘字体渲染的混淆文本,动态插入的内容同样生效,多套码表(正文 / 搜索页)自动识别
- **书籍样式**:支持随正文下发的 CSS,同时限制作用域避免污染全站
- **章节信息补全**:补上卷名、精确到秒的更新时间,并修正页面标题
@@ -31,6 +31,14 @@
- **结果卡片**:显示评分、字数、在读人数、最新章节等信息,右键可加入书架
- **个人化推荐**:可选携带登录态获取个人化结果,默认关闭
### 书籍下载
- **两种格式**:EPUB 保留原始排版、插图与分卷目录;TXT 是纯文本,可选 UTF-8 / GBK 编码
- **多个入口**:书籍详情页按钮、书架右键菜单、搜索结果右键菜单,右键可单次指定格式
- **EPUB 选项**:插图下载、书籍自带排版、每卷卷页均可单独开关;章节内联样式自动去重
- **进度与取消**:抓取、组装、压缩全程可见进度,随时可以取消
- **抓取调度**:批量接口按 30 章一批串行请求,可调间隔与重试轮数,失败章节自动补抓
### 书架优化
- **完整书架**:展示所有书籍(包括因版权等原因网页端不可见的),支持跳转阅读
@@ -46,6 +54,7 @@
- **屏蔽埋点上报**:拦截发往字节、百度统计域名的埋点请求
- **设备管理**:首次使用自动注册匿名设备并激活会员,支持手动填写设备信息
- **接口可选**:正文与详情默认走番茄 APP 接口,可切换到红烛(风控更低),某一侧数据不全时自动互为补充
## 开发计划
@@ -53,7 +62,7 @@
1. 短剧网页端播放
2. 更完善的用户详情界面(自己的和他人的)
3. 段评、章评、书评功能
3. 段评、章评、书评功能(书评接口已接通,界面待做)
4. 阅读数据上报(与安卓端同步阅读进度与时长)
5. APP 端带推荐的排行榜
6. 分类页与书城页面替换
@@ -69,6 +78,8 @@
安装构建产物 `fanqie-assistant.user.js` 即可。
部分功能(书评点赞)需要脚本读到 HttpOnly 的 `sessionid`,Tampermonkey 默认不给,需手动放开,见 [关于账号安全](#关于账号安全)。其余功能开箱可用。
## 开发
```bash
@@ -100,28 +111,43 @@ npm run build
src/
├── main.ts 入口,安装导航钩子并按顺序初始化各模块
├── config.ts 设备配置与全局常量
├── types.ts 书籍、卷、章节等数据模型
├── types.ts 书籍、卷、章节、书评等数据模型
├── settings.ts 设置项定义与持久化
├── settingsPanel.ts 设置面板的挂载/卸载
├── downloadPanel.ts 下载进度弹窗的挂载/卸载
├── userStyle.ts 用户自定义样式(字体、CSS)
├── cssInject.ts 基础样式注入
├── fontDecrypt.ts 自绘字体文本还原
├── fontDecrypt.ts 自绘字体文本还原(多套码表)
├── localStorage.ts 存储读写封装
├── api/ 接口相关内容
├── crypto/ 加密算法相关内容
├── download/ 下载流程
│ ├── index.ts 任务编排(详情+目录 -> 抓正文 -> 组装 -> 保存)
│ ├── chapters.ts 批量抓取调度(分批、限流、重试)
│ ├── content.ts 正文解析(XHTML 片段与纯文本)
│ ├── epub.ts EPUB 组装
│ ├── txt.ts TXT 组装
│ ├── gbk.ts GBK 编码
│ ├── meta.ts 书籍元信息整理
│ ├── save.ts 文件落盘与文件名清理
│ └── task.ts 进度与取消
├── epub/ EPUB 打包库(llepub-saver 的 TypeScript 移植)
├── hooks/ 页面钩子
│ ├── index.ts 钩子调度器
│ ├── readerHook.ts 阅读页正文替换
│ ├── bookshelfHook.ts 书架页面接管
│ ├── searchHook.ts 搜索页面接管
│ ├── downloadHook.ts 详情页下载按钮注入
│ ├── userHook.ts 用户菜单增强
│ └── fetchHook.ts 请求拦截(屏蔽埋点)
├── utils/ 通用工具
│ ├── index.ts DOM 等待、数组分块等
│ ├── request.ts GM_xmlhttpRequest 封装
│ ├── cookie.ts Cookie 读取(含 HttpOnly)
│ ├── time.ts 时间格式化
│ ├── compress.ts Gzip 压缩/解压
│ └── footnote.ts 章内注释处理
│ ├── footnote.ts 章内注释处理
│ └── zipfix.ts 修复 JSZip 在脚本沙箱里的异步调度
├── views/ Vue 组件
│ ├── SettingsView.vue 设置面板
│ ├── BookshelfView.vue 书架主视图
@@ -134,12 +160,15 @@ src/
│ ├── SearchBookCard.vue 搜索结果卡片
│ ├── SearchLanding.vue 搜索落地页(热搜与榜单)
│ ├── searchRoute.ts 搜索词与 URL 的同步
│ └── useSearch.ts 搜索数据逻辑
│ ├── useSearch.ts 搜索数据逻辑
│ └── DownloadProgress.vue 下载进度弹窗
└── assets/ 样式与图标
├── script.css 阅读器样式
├── bookshelf.css 书架样式
├── search.css 搜索页样式
├── settings.css 设置面板样式
├── download.css 下载弹窗与按钮样式
├── default.css 番茄 APP 正文基础样式(EPUB 导出用)
└── *.svg 图标资源
```
@@ -151,9 +180,20 @@ src/
## 关于账号安全
脚本**没有申请 `GM_cookie` 权限**。`sessionid` 是 HttpOnly 的,脚本读不到、也没打算读。所有需要登录凭据的请求都用页面原生 `fetch` 发送的同源请求完成,由浏览器自动带上 Cookie,凭据不经过脚本,也不会被发往任何其他地方。
搜索走的是番茄网页站同源挂载的 APP 接口(`fanqienovel.com/reading/bookapi/*`),签名由脚本本地生成。默认以匿名方式请求(`credentials: 'omit'`),只有在设置里主动打开「个人化推荐」后才会带上登录态,此时 Cookie 同样由浏览器附加,脚本不接触。
如果后续同源接口无法满足脚本需求,会考虑使用 `GM_cookie` 权限。但我们确保您的凭据不会被发送到番茄小说及其相关平台以外的任何第三方。后期加入第三方接口时,接口由您自己输入。此时,我们可能会将凭据发往 **您自己填写的 API** 。使用即应确认风险,我们不对任何第三方接口的行为负责。
绝大多数需要登录凭据的请求都用页面原生 `fetch` 发同源请求完成,由浏览器自动带上 Cookie,凭据不经过脚本。搜索走番茄网页站同源挂载的 APP 接口(`fanqienovel.com/reading/bookapi/*`),签名由脚本本地生成,默认以匿名方式请求(`credentials: 'omit'`),只有在设置里主动打开「个人化推荐」后才会带上登录态。
**脚本现在申请了 `GM_cookie` 权限。** 原因是书评相关接口挂在字节网关的根路径(`reading.snssdk.com/novel/commentapi/*`),而番茄网页站只把 `/reading` 反代到了网关,这部分没有同源可用,点赞等写操作必须由脚本自己带上 `sessionid`。该 Cookie 只随请求发往番茄/字节官方域名,不会发往任何第三方。
`sessionid` 是 HttpOnly 的,Tampermonkey 稳定版默认不把它交给脚本。需要用到相关功能时,请手动放开:
1. 设置 → 通用 → 配置模式 → 改为「高级」
2. 设置 → 高级 → 安全 → 「允许脚本访问 Cookie」 → 改为 `All`
不放开也不影响阅读、搜索、书架、下载等功能,只是书评的点赞与「我赞过没」的状态会不可用。
后期加入第三方接口时,接口由您自己输入。此时,我们可能会将凭据发往 **您自己填写的 API**。使用即应确认风险,我们不对任何第三方接口的行为负责。
另外解释一下 `@connect` 里的 `jxbhmy.com`:那是番茄旗下红烛小说的接口,与番茄数据基本通用、风控更低,属于第一方而非第三方。脚本不会把您的凭据发往番茄及其关联平台以外的任何地方。
代码全部开源,欢迎审查。