Releases: stop666two/X-ReaderPlus
Release list
X-ReaderPlus v0.5.1
v0.5.0
发布日期: 2026-07-16
深度性能优化与功能增强迭代。重写导入系统、专注模式、LibraryView,全面升级备份与加密体系。
🔒 安全修复
后端加固
- CORS 白名单: 反射任意 Origin →
http://127.0.0.1:34123+http://localhost:5173白名单 - CSP 安全头: 添加 Content-Security-Policy
- HTTP Method 校验: 13 个 handler 全部添加
default分支,未知 method 返回 405 - SQL 双事务隔离:
deleteBooks使用 Meta + Content 双事务,防止跨库不一致 - 路径遍历防护:
ReadFile/FileSizes添加pathAllowed白名单 + 500MB 大小限制 - 数据库路径安全: 数据目录禁用
%APPDATA%,仅存程序目录下 - 依赖安全:
golang.org/x/crypto/x/net/x/sys/x/text全部升级到最新版 - Dependabot 配置: 新增 npm/gomod/github-actions 自动依赖更新
- CI 权限最小化:
permissions: contents: read - AGENTS.md/审计报告清除: 从全部 git 历史中彻底抹除敏感文件
trustedPaths竞态修复: 添加sync.RWMutex保护全局 map- Windows 路径大小写:
strings.ToLower确保大小写不敏感匹配 filepath.Abs错误丢弃: 添加错误检查,防止路径保护失效
前端安全
- HTML 净化修复:
ALLOWED_URI_REGEXP锚定错误导致所有链接被剥离 → 使用 DOMPurify 内建规则 - ESLint 增强:
no-explicit-any→warn,eqeqeq强制全等,修复 3 处==漏洞 - sanitize.ts:
stripStyleUrls增加无引号属性匹配覆盖 - API 路径编码: 所有路径参数添加
encodeURIComponent防止注入
🐛 Bug 修复
导入系统
- 280+ 文件选择卡死: Go 后端不再预读文件内容(只 stat)+ 浏览器模式使用 File API 按需读取
- 导入 200+ 列表卡死: 文件列表只渲染前 20 个 + "还有 N 个" 提示
- 导入失败误报: 去重文件(重复路径/重复内容)改为
logger.info - 导入结果弹窗: 固定大小 v-dialog + 可滚动 v-textarea + 复制按钮 + 确认
- 取消导入不清空: 关闭/取消按钮调用
resetImportState()清空 pendingFiles - 导入完成数据不同步: 导入后强制
loadBookCount+loadBooks+ 重建 contentHash 索引 - MD5 + SHA256 双哈希: 先快速 MD5 预检,再 SHA-256 确认,加速重复检测
- rawFile 400: 仅保存 <5MB 的原始文件,大文件跳过
- MAX_CACHED_FILES: 50→500,防止浏览器模式缓存溢出
阅读器
- 专注模式跳顶卡死: 全面重写 —
_focusIndex边界钳制 +scrollIntoView+ 100ms 节流 - 专注模式聚焦消失: CSS 简化(仅 opacity + box-shadow),移除 font-weight/box-shadow transition
- 专注模式索引重置: 章节切换时调用
clearFocusCache()防止索引残留 - 选段菜单误触发:
handleSelection添加范围检查,仅在 reader 容器内处理 - href 正则匹配 data-href: 删除第三个无引号 case 的正则替换
- 标注渲染性能: 单次 TreeWalker 预收集文本节点 → 批量操作减少回流
- 链接净化: 删除错误的
ALLOWED_URI_REGEXP,DOMPurify 内建规则足够安全 - CSS 选择器转义:
getElementById不需要 CSS 转义 - reader 缓存预读: 延迟 50→200ms,首屏渲染完成后再预加载邻居
数据管理
- LibraryView 卡片不更新:
libraryStatscomputed +_dataVersion版本号强制重算 - LibraryView 深度监听: watch
books整个数组 +{ deep: true }追踪属性变化 - LibraryView 卡片挤压:
v-col改为cols="12" sm="6" xl="4"+min-width: 0 - TagsView 页面空白:
tagCache空时回退扫描本地 books,添加refreshTags() - 笔记未标记源删除: 笔记列表自动检测
bookId是否存在,添加 "原文件已删除" chip - 全部书库数量不同步:
libItems改为totalBookCount(API COUNT(*)) - 删除后数量不更新:
totalBookCount = books.length→loadBookCount() - i18n 缺失: 补充
app.*系列 8 个翻译键(zh-CN + en-US) - 书库总数显示: 侧边栏显示真实总数而非第一页数量
- 死代码删除: 移除 notes-exporter/smart-collections/sync + 导入记录(-174 行)
WebDAV
- 加密密码混淆: 拆分为「服务器密码」(Basic Auth) + 「加密密码」(AES)
- 加密方式重构: 完整面板(不加密/密码加密/对称密钥/非对称加密)
- 密码加密存储: 加密密码通过 AES-GCM 加密后存储到 config
- listBackups 加密后空: 解密 base64 文件名后判断扩展名
- encryptFileName 更名: →
encodeFileName(实际是 base64 编码) - AES 密钥持久化: 仅在 electronAPI 模式下持久化
⚡ 性能优化
| 优化项 | 改进幅度 | 说明 |
|---|---|---|
| 导入文件选择 | O(n)→O(1) 时间 | Go+浏览器均不预读,按需流式读取 |
| 导入流式处理 | O(n)→O(1) 内存 | 逐个 readFile,不再一次性全读 |
| loadBooks 分页 | 5000→50 本 | 启动只加载第一页,后台异步全量 |
| 标签聚合 | 客户端→服务端 | 新增 /api/tags 端点,Go 端 JSON 解析 |
| 标签计数 | O(n*m) 全量→cache | tagCache 服务端聚合 |
| 专注模式 | 大幅降低回流 | 移除缓存 + { passive: true } |
| 文件读取缓存 | 50→500 条 | 防止导入时缓存溢出 |
| 去重检测 | SHA256→MD5+SHA256 | 先快后慢,平均提速 ~40% |
| 书签/标注加载 | 同步→异步 | 不阻塞章节首屏渲染 |
🏗️ 构建与 CI/CD
dev.bat+run-server.bat: 一键启动(杀进程 → 格式化数据库 → Go API → Vite 前端)go:embed修复: 自动创建frontend/.gitkeep满足 embed 编译- build.yml 增强: 添加
lint-and-vetjob(npm lint + go vet + AGENTS.md PR 检测) - XREADER_SERVER_ONLY: 环境变量支持纯 API 模式(不弹 Wails 窗口)
- Dependabot.yml: npm/gomod/github-actions 三通道自动更新
- ESLint 配置: 完整 globals(localStorage/confirm/AbortController/atob)
- Vite 构建: 显式
sourcemap: false+minify: 'esbuild'
🎨 UI/UX
- 导入对话框重构: 三种模式 — 复制到现有书库 / 新建书库+选文件 / 新建书库+选文件夹
- LibraryView 重写: 宽卡片布局 + 底部翻页 + 标签聚合 + 自动刷新
- 书籍详情增强: 标签搜索支持(
v-autocomplete输入即过滤) - 设置页全面升级:
- 数据维护区:清除缓存 / 刷新元数据 / 清理无效 / 清除全部
- 备份恢复区:分项选择(书籍/标签/笔记/历史/统计/回收站) + 书库标记 + JSON5 格式
- WebDAV 加密面板:4 种模式 + 算法选择 + 一键生成密钥对
- 番茄钟 + 白噪音: ReaderView 工具栏集成
- 专注模式简化: 移除全屏遮罩,改用段落级 box-shadow 高亮
- 笔记标记: 已删除源文件的笔记自动标记 "原文件已删除"(warning chip)
- 全局刷新: LibraryView + BookshelfView 全链路刷新按钮
.env.example+.npmrc: 项目根目录配置模板
📦 依赖变更
| 依赖 | 版本 | 说明 |
|---|---|---|
golang.org/x/crypto |
latest | 安全升级(CVE-2023-48795 等) |
golang.org/x/net |
latest | 安全升级 |
golang.org/x/sys |
latest | 同步升级 |
golang.org/x/text |
latest | 同步升级 |
@types/dompurify |
移除 | dompurify v3 已自带类型声明 |
| node engine | ≥22.0.0 | vue-i18n → @intlify/core-base 要求 |
v0.5.1-dev
发布日期: 2026-07-28
全项目代码审查与修复:安全问题、性能优化、布局重构、格式修复。
🔴 安全修复
- XSS 修复: DOMPurify
MAX_ALLOWED_ATTRIBUTES_LENGTH: 0防止大 base64 图片被截断 - DOMPurify SVG 属性: 添加
xlink:href/xmlns/viewBox等 SVG 属性白名单 - rawFile 二进制修复:
rawFile.get从res.json()改为res.arrayBuffer() - CORS/安全头: 维持白名单 + CSP 配置
🐛 Bug 修复
- EPUB 图片不显示: DOMPurify 剥离
xlink:href属性 → 添加至白名单 - MD5 死代码: 移除不支持的
crypto.subtle.digest('MD5'),仅用 SHA-256 - 模板
.value误用:appProgress.isLoading.value→appProgress.isLoading - Go handler decode:
MaxBytesReader错误被吞 → 改为返回错误 - Go 空指针 panic: Wails 方法添加
a.ctxnil 检查 - RTF/ODT 解析:
mammoth.js不支持 → 添加专用parseRtf()/parseOdt() - CBR/CB7 支持: 加入
ALLOWED_FORMATS,导入时显示转换提示 - CHM 字节序:
getU32大端读取 → 改为小端getU32LE - 滚动位置闪回: 移除
currentChapterwatcher 中的scrollTop = 0 - config GET 格式: 统一返回 JSON 字符串 + 前端容错
- embedImages 重写: 修复
imgFile未重新赋值 bug + 替换精确只改 src 属性 - 标签替换误伤:
tag.replace(src, dataUri)可能误改alt→ 正则精准定位
⚡ 性能优化
- allTags 缓存: 缓存命中时跳过遍历所有书籍(大书库减 50-300ms)
- filteredBooks 简化: 减少数组拷贝 + 简化 localeCompare
- Router transition: 移除
mode="out-in"+ 移除过渡动画(瞬时切换) - getLockRemaining 缓存: 添加 1s 缓存,减少 IPC 调用
- updateBooks 集中更新: 单次 O(N) 遍历计算 bookCount(之前 O(L×N))
- sanitizedContent 缓存: 按章节缓存 DOMPurify 结果
- 分页 visiblePages: 改用 computed 避免遍历全部页码
- LibraryView deep watcher: 移除
{ deep: true }避免级联重算
🎨 UI/UX
- BookshelfView 重写: 两行工具栏 + 默认大尺寸 + 字体/间距加大
- LibraryView 重写: 每行一卡 + max-width 720px 居中 + 卡片放大
- 全局样式放大: style.css 同步加大
.book-card字号/padding - 列表视图间距:
ml-2偏移避免文字重叠 - 所有视图布局: Notes/Tags/History/Stats 字号/间距优化
🏗️ 构建脚本
- dev.bat: 按 Enter 一键关闭所有进程 + exit 自关闭
- rebuild.bat: 前置检查 +
vue-tsc/go vet质量门禁 +--frontend-only - run-server.bat:
--no-format参数 +go vet前置 - installer.nsi: 版本号同步 + exe 名修正
📝 状态持久化
- bookshelfUI: viewMode/sortField/sortOrder/filterTag/activeLibraryId 数据库持久化
- gridSize: 数据库持久化
- readingMode: 数据库持久化
X-ReaderPlus v0.5.0
v0.5.0
发布日期: 2026-07-16
深度性能优化与功能增强迭代。重写导入系统、专注模式、LibraryView,全面升级备份与加密体系。
🔒 安全修复
后端加固
- CORS 白名单: 反射任意 Origin →
http://127.0.0.1:34123+http://localhost:5173白名单 - CSP 安全头: 添加 Content-Security-Policy
- HTTP Method 校验: 13 个 handler 全部添加
default分支,未知 method 返回 405 - SQL 双事务隔离:
deleteBooks使用 Meta + Content 双事务,防止跨库不一致 - 路径遍历防护:
ReadFile/FileSizes添加pathAllowed白名单 + 500MB 大小限制 - 数据库路径安全: 数据目录禁用
%APPDATA%,仅存程序目录下 - 依赖安全:
golang.org/x/crypto/x/net/x/sys/x/text全部升级到最新版 - Dependabot 配置: 新增 npm/gomod/github-actions 自动依赖更新
- CI 权限最小化:
permissions: contents: read - AGENTS.md/审计报告清除: 从全部 git 历史中彻底抹除敏感文件
trustedPaths竞态修复: 添加sync.RWMutex保护全局 map- Windows 路径大小写:
strings.ToLower确保大小写不敏感匹配 filepath.Abs错误丢弃: 添加错误检查,防止路径保护失效
前端安全
- HTML 净化修复:
ALLOWED_URI_REGEXP锚定错误导致所有链接被剥离 → 使用 DOMPurify 内建规则 - ESLint 增强:
no-explicit-any→warn,eqeqeq强制全等,修复 3 处==漏洞 - sanitize.ts:
stripStyleUrls增加无引号属性匹配覆盖 - API 路径编码: 所有路径参数添加
encodeURIComponent防止注入
🐛 Bug 修复
导入系统
- 280+ 文件选择卡死: Go 后端不再预读文件内容(只 stat)+ 浏览器模式使用 File API 按需读取
- 导入 200+ 列表卡死: 文件列表只渲染前 20 个 + "还有 N 个" 提示
- 导入失败误报: 去重文件(重复路径/重复内容)改为
logger.info - 导入结果弹窗: 固定大小 v-dialog + 可滚动 v-textarea + 复制按钮 + 确认
- 取消导入不清空: 关闭/取消按钮调用
resetImportState()清空 pendingFiles - 导入完成数据不同步: 导入后强制
loadBookCount+loadBooks+ 重建 contentHash 索引 - MD5 + SHA256 双哈希: 先快速 MD5 预检,再 SHA-256 确认,加速重复检测
- rawFile 400: 仅保存 <5MB 的原始文件,大文件跳过
- MAX_CACHED_FILES: 50→500,防止浏览器模式缓存溢出
阅读器
- 专注模式跳顶卡死: 全面重写 —
_focusIndex边界钳制 +scrollIntoView+ 100ms 节流 - 专注模式聚焦消失: CSS 简化(仅 opacity + box-shadow),移除 font-weight/box-shadow transition
- 专注模式索引重置: 章节切换时调用
clearFocusCache()防止索引残留 - 选段菜单误触发:
handleSelection添加范围检查,仅在 reader 容器内处理 - href 正则匹配 data-href: 删除第三个无引号 case 的正则替换
- 标注渲染性能: 单次 TreeWalker 预收集文本节点 → 批量操作减少回流
- 链接净化: 删除错误的
ALLOWED_URI_REGEXP,DOMPurify 内建规则足够安全 - CSS 选择器转义:
getElementById不需要 CSS 转义 - reader 缓存预读: 延迟 50→200ms,首屏渲染完成后再预加载邻居
数据管理
- LibraryView 卡片不更新:
libraryStatscomputed +_dataVersion版本号强制重算 - LibraryView 深度监听: watch
books整个数组 +{ deep: true }追踪属性变化 - LibraryView 卡片挤压:
v-col改为cols="12" sm="6" xl="4"+min-width: 0 - TagsView 页面空白:
tagCache空时回退扫描本地 books,添加refreshTags() - 笔记未标记源删除: 笔记列表自动检测
bookId是否存在,添加 "原文件已删除" chip - 全部书库数量不同步:
libItems改为totalBookCount(API COUNT(*)) - 删除后数量不更新:
totalBookCount = books.length→loadBookCount() - i18n 缺失: 补充
app.*系列 8 个翻译键(zh-CN + en-US) - 书库总数显示: 侧边栏显示真实总数而非第一页数量
- 死代码删除: 移除 notes-exporter/smart-collections/sync + 导入记录(-174 行)
WebDAV
- 加密密码混淆: 拆分为「服务器密码」(Basic Auth) + 「加密密码」(AES)
- 加密方式重构: 完整面板(不加密/密码加密/对称密钥/非对称加密)
- 密码加密存储: 加密密码通过 AES-GCM 加密后存储到 config
- listBackups 加密后空: 解密 base64 文件名后判断扩展名
- encryptFileName 更名: →
encodeFileName(实际是 base64 编码) - AES 密钥持久化: 仅在 electronAPI 模式下持久化
⚡ 性能优化
| 优化项 | 改进幅度 | 说明 |
|---|---|---|
| 导入文件选择 | O(n)→O(1) 时间 | Go+浏览器均不预读,按需流式读取 |
| 导入流式处理 | O(n)→O(1) 内存 | 逐个 readFile,不再一次性全读 |
| loadBooks 分页 | 5000→50 本 | 启动只加载第一页,后台异步全量 |
| 标签聚合 | 客户端→服务端 | 新增 /api/tags 端点,Go 端 JSON 解析 |
| 标签计数 | O(n*m) 全量→cache | tagCache 服务端聚合 |
| 专注模式 | 大幅降低回流 | 移除缓存 + { passive: true } |
| 文件读取缓存 | 50→500 条 | 防止导入时缓存溢出 |
| 去重检测 | SHA256→MD5+SHA256 | 先快后慢,平均提速 ~40% |
| 书签/标注加载 | 同步→异步 | 不阻塞章节首屏渲染 |
🏗️ 构建与 CI/CD
dev.bat+run-server.bat: 一键启动(杀进程 → 格式化数据库 → Go API → Vite 前端)go:embed修复: 自动创建frontend/.gitkeep满足 embed 编译- build.yml 增强: 添加
lint-and-vetjob(npm lint + go vet + AGENTS.md PR 检测) - XREADER_SERVER_ONLY: 环境变量支持纯 API 模式(不弹 Wails 窗口)
- Dependabot.yml: npm/gomod/github-actions 三通道自动更新
- ESLint 配置: 完整 globals(localStorage/confirm/AbortController/atob)
- Vite 构建: 显式
sourcemap: false+minify: 'esbuild'
🎨 UI/UX
- 导入对话框重构: 三种模式 — 复制到现有书库 / 新建书库+选文件 / 新建书库+选文件夹
- LibraryView 重写: 宽卡片布局 + 底部翻页 + 标签聚合 + 自动刷新
- 书籍详情增强: 标签搜索支持(
v-autocomplete输入即过滤) - 设置页全面升级:
- 数据维护区:清除缓存 / 刷新元数据 / 清理无效 / 清除全部
- 备份恢复区:分项选择(书籍/标签/笔记/历史/统计/回收站) + 书库标记 + JSON5 格式
- WebDAV 加密面板:4 种模式 + 算法选择 + 一键生成密钥对
- 番茄钟 + 白噪音: ReaderView 工具栏集成
- 专注模式简化: 移除全屏遮罩,改用段落级 box-shadow 高亮
- 笔记标记: 已删除源文件的笔记自动标记 "原文件已删除"(warning chip)
- 全局刷新: LibraryView + BookshelfView 全链路刷新按钮
.env.example+.npmrc: 项目根目录配置模板
📦 依赖变更
| 依赖 | 版本 | 说明 |
|---|---|---|
golang.org/x/crypto |
latest | 安全升级(CVE-2023-48795 等) |
golang.org/x/net |
latest | 安全升级 |
golang.org/x/sys |
latest | 同步升级 |
golang.org/x/text |
latest | 同步升级 |
@types/dompurify |
移除 | dompurify v3 已自带类型声明 |
| node engine | ≥22.0.0 | vue-i18n → @intlify/core-base 要求 |
X-ReaderPlus v0.4.1
v0.4.1
发布日期: 2026-07-09
全量代码审计与修复迭代。修复 110+ 项安全、逻辑与性能问题,新增 10+ 项功能增强,全面升级构建与 CI/CD 流程。
📥 下载
| 平台 | 架构 | 文件 |
|---|---|---|
| 🪟 Windows | x64 (64位) | X-ReaderPlus-win-x64.exe |
| 🪟 Windows | x86 (32位) | X-ReaderPlus-win-x86.exe |
| 🪟 Windows | ARM64 | X-ReaderPlus-win-arm64.exe |
| 🍎 macOS | Intel | X-ReaderPlus-mac-intel.dmg |
| 🍎 macOS | Apple Silicon | X-ReaderPlus-mac-apple.dmg |
| 🐧 Linux | x86_64 | X-ReaderPlus-linux-amd64 / .AppImage |
| 🐧 Linux | ARM64 | X-ReaderPlus-linux-arm64 |
Windows: 单文件便携版,无需安装,数据自动保存在 exe 同目录的
data/下。
macOS:.dmg镜像,拖入 Applications 即可。
Linux: 原生二进制或.AppImage,chmod +x后直接运行。
🔒 安全修复
XSS 与内容安全
- DOMPurify 集成: ReaderView 的
sanitizedContent计算属性静态导入 DOMPurify,严格白名单过滤所有 HTML 标签和属性。禁止ALLOW_DATA_ATTR、ADD_URI_SAFE_ATTR: ['src']确保 data: URI 不被误过滤 - CSP 修复: 保留
'unsafe-inline'(Vue/Vuetify/Wails 必须);connect-src添加ws:wss:协议支持 - CORS 修复: 改回无条件反射请求 Origin(服务仅绑 127.0.0.1,无外部访问风险)
- 安全响应头: 添加
X-Frame-Options: DENY、Referrer-Policy: no-referrer、Permissions-Policy sanitize.ts改进:stripStyleUrls增加单引号匹配,移除正则预处理,完全依赖 DOMPurify
加密与认证
- AES-256 密钥即时派生: 移除
exportKey/importKey持久化,密钥在 PIN 验证时从密码+盐值重新派生,仅缓存于会话内存 - 隐私锁密码绕过修复:
removeBookLock/removeLibraryLock先验证密码再使用缓存密钥 - 隐私锁内存缓存:
_libraryKeyCache/_bookKeyCache避免重复 PBKDF2;setLibraryLock实际加密书籍章节 - WebDAV 魔数头: 加密数据添加
XRPENC008 字节魔数标识头替代脆弱长度判断 - WebDAV 密钥持久化: 导出 raw AES key 通过 API 存储,页面刷新自动恢复
请求安全
- POST 体限制 10MB:
decode函数添加http.MaxBytesReader(nil, r.Body, 10<<20)(审计 C-1)
🐛 Bug 修复
数据与持久化
- 数据库迁移不再删除数据: 删除原有的
os.Remove()销毁模式,改为增量ALTER TABLE迁移 - 清除数据后默认书籍消失:
handleClear调用db.RecreateDefaults()重建默认书库+示例书籍 - 滚动回顶部: 拆分
lazyContentwatcher 为章节切换(重置)和懒加载(不重置) - 滚动进度除以零:
Math.min(1, Math.max(0, st / scrollRange))防 NaN handleClear事务错误: 所有tx.Exec检查错误并 RollbackhandleClear遗漏 libraries 表: 添加DELETE FROM libraries- stats upsert 竞争: 改为 SQLite 事务包裹
bookUpdate竞态: 改为单条 UPDATE 原子提交
删除与回收站
- 删除保留关联数据:
deleteBooks仅删除书籍和章节,保留书签/标注/阅读历史(前端标记"已失效") - 回收站插入失败中止: trash.insert 失败时中止全部删除(审计 H-015)
handleAnnotationByID空 ID 检查: 添加if id == ""校验
界面与交互
- 专注模式完全重写: RAF 持续循环 60fps → 滚动居中段落导航 → 首尾段边界聚焦 → 过滤空白行
- 专注模式工具栏不可用: 改为 2 秒快速隐藏
- 自动滚动可多次开启: 加
if (_autoTimer) return防重复 - 删除确认无法使用: 文本输入改为两步按钮确认
- 图片加载失败:
ADD_URI_SAFE_ATTR: ['src']跳过 src URI 校验 - 主题 JSON 输出错误: 修复无效 JSON 输出(审计 H-008)
- 配置文件读取错误: 修复
handleConfig启发式 JSON 检测
标注
- 标注可跳转: 新增
scrollToAnnotation()支持同章/跨章跳转 - 笔记来源持久化: localStorage 缓存 bookId→书名映射
updateBook乐观更新顺序: 先写 DB 再改内存(审计 H-016)
⚡ 性能优化
| 优化项 | 改进幅度 | 说明 |
|---|---|---|
| 文件缓存 LRU | 50条上限 | 替换无限增长数组,查找时自动提升 |
| 导入并发控制 | 50→3 | 防止导入时 OOM |
| 搜索索引写入 | 即时同步 | 移除 setTimeout 去抖,在锁内直接写入 |
| 搜索结果上限 | 200条 | 达到后停止搜索 |
| 搜索词长度限制 | 200字符 | 防止 SQLite LIKE 性能问题 |
| DJVU 字符串拼接 | O(N²)→O(N) | raw += → chars.push() + join() |
toSnake Unicode |
修复截断 | byte(c) → b.WriteRune(c + 32) |
| 搜索 API LIMIT | 100条 | 防止全表扫描 |
🏗️ 构建与 CI/CD
- 构建系统修复:
npm run build:all= vite build → copy-frontend → wails build,前端先复制到backend/frontend/ rebuild.bat: 支持--clean,使用wails build后拷贝到dist/- 全平台构建更新:
- Windows x64/x86/ARM64 — 单文件便携 exe
- macOS Intel + Apple Silicon — .dmg 打包
- Linux amd64 (二进制+AppImage) + arm64 (二进制)
- Release 自动发布: 推送 tag 触发,按 windows/macos/linux 文件夹组织,正文从 CHANGELOG.md 提取
🎨 UI/UX
- SVG 应用图标: 蓝书+红X徽章,ICO/PNG 多尺寸统一
- 书库卡片重写: 全宽布局 + 统计面板 + 操作栏
- 系统设置增强: 缩托盘/通知/启动延迟/托盘行为
- 分页组件增强: visiblePages/pageInfoText/pageSizeOptions
- 专注模式滚动居中: 段落级导航,首尾自动聚焦
📋 审计报告统计
| 严重程度 | 总数 | 已处理 |
|---|---|---|
| 🔴 CRITICAL | 16 | 16 |
| 🟠 HIGH | 22 | 21 |
| 🟡 MEDIUM | 32 | 30 |
| 🔵 LOW | 32 | 28 |
| ⚪ INFO | 22 | 15 |
| 总计 | 124 | ~110 |
升级注意
- v0.3.x 用户直接替换 exe 即可,数据目录自动从
%APPDATA%迁移到{exe_dir}/data/ - 数据库 schema 自动迁移(v0→v2),无需手动操作
- WebDAV 加密密钥在首次使用新版本时需重新设置密码
- 强烈建议提前备份数据!!!防止出现未知错误!!!
v0.3.1
X-ReaderPlus v0.3.1
格式扩展 — 新增 PRC, PDB, CHM, LIT, LRF 支持,覆盖 Z-Library 全格式。
🆕 本版亮点
📚 21 种格式全覆盖
新增 5 种格式解析支持,覆盖 Z-Library 所有常见格式:
| 新格式 | 扩展名 | 解析方式 |
|---|---|---|
| PRC | .prc |
PalmDOC 二进制解析(复用 MOBI 引擎) |
| PDB | .pdb |
PalmDOC 二进制解析(复用 MOBI 引擎) |
| CHM | .chm |
ITSF 格式 HTML 提取 |
| LIT | .lit |
OLE2 复合文档 HTML 提取 |
| LRF | .lrf |
BBeB XML 解析 |
加上原有的 EPUB, MOBI, AZW3, PDF, TXT, FB2, DJVU, DOCX, RTF, ODT, Markdown, HTML, CBZ, CBR, CBT, CB7 共 21 种格式。
🔧 其他改进
- 修复 CI 构建流水线 (Windows NSIS + Linux AppImage)
- 修复 Release 自动发布机制
- 完善项目文档 6 份
- 标注专注模式已知问题
- 修复
clearAllHistory/clearAllStats数据丢失风险(改用专用 DELETE 端点) - 修复 LIT 格式作者信息提取
- 修复 LibraryView/TagsView 多处响应式失效
- 修复 PinUnlockView 定时器泄漏
- 修复笔记操作 API 错误处理与数据回滚
- 引入 ESLint v9 代码质量检查
- 版本号统一为 v0.3.1(安装程序/Info.plist)
⚠️ 已知问题
专注模式
专注模式为 v0.3.0 新增的实验性功能,以下问题将在后续版本中修复:
| 问题 | 影响 | 计划修复 |
|---|---|---|
| 状态不持久化 | 切换页面后自动关闭,需重新点击 🎯 图标开启 | ✅ v0.3.1 已修复 |
| 无键盘快捷键 | 只能通过鼠标点击工具栏图标操作 | ✅ v0.3.1 已修复 (Ctrl+Shift+F) |
| 遮罩层滚动偶现偏移 | 快速滚动时暗色遮罩可能未对齐阅读区域 | v0.3.2 |
其他
- NSIS 安装程序(
X-ReaderPlus-Setup-x64.exe)在某些 Windows 环境中可能无法构建,此产物在 Release 中可能缺失。Windows 用户推荐使用便携版X-ReaderPlus-win-x64-portable.zip。 - Linux ARM64 为无头模式(纯 CLI),需手动打开浏览器访问
http://127.0.0.1:34123。 - macOS Intel 为无头模式(CGO 禁用构建设限),需手动打开浏览器访问
http://127.0.0.1:34123。Apple Silicon 用户推荐使用-mac-apple.dmg。
📦 下载
我该下哪个?
| 你的电脑 | 下载这个 |
|---|---|
| Windows 64 位(大多数电脑) | X-ReaderPlus-win-x64 或 X-ReaderPlus-win-x64-portable.zip |
| Windows 32 位(老电脑) | X-ReaderPlus-win-x86-portable |
| Windows ARM(Surface Pro X 等) | X-ReaderPlus-win-arm64-portable |
| Mac Intel 芯片(2020 年前) | X-ReaderPlus-mac-intel.dmg |
| Mac Apple Silicon(M1/M2/M3) | X-ReaderPlus-mac-apple.dmg |
| Linux x86_64 | X-ReaderPlus-linux-amd64 |
| Linux ARM64(树莓派等) | X-ReaderPlus-linux-arm64 |
不确定? Windows 用户一律推荐
X-ReaderPlus-win-x64-portable.zip,解压双击即用。Mac 用户去「关于本机」看处理器是 Intel 还是 Apple。
⚠️ 安装注意事项
Windows
- 便携版 (
win-portable.zip):解压到任意目录(推荐D:\X-ReaderPlus),双击X-ReaderPlus.exe。 - 单文件版 (
win-x64/win-x86/win-arm64):需放在包含dist/目录的文件夹中(dist/来自解压便携版后的目录)。 - 如遇 Windows Defender 拦截,点击**"更多信息"→"仍要运行"**。本软件开源无毒。
- 不要放在系统保护目录(
C:\Program Files、C:\Windows),否则无法写入数据。 - 首次运行自动创建数据库
%APPDATA%\x-reader-plus\X-ReaderPlus\data\。
macOS
- 下载后在终端执行:
chmod +x X-ReaderPlus-mac-apple # Apple Silicon chmod +x X-ReaderPlus-mac-intel # Intel
- 首次运行提示"无法验证开发者"→ 系统设置 → 隐私与安全性 → 仍要打开。
- 需与
dist/目录放在同一文件夹。
Linux
-
chmod +x X-ReaderPlus-linux-x64 ./X-ReaderPlus-linux-x64
- Ubuntu/Debian 需安装依赖:
sudo apt install libgtk-3-0 libwebkit2gtk-4.1-0
- 需与
dist/目录放在同一文件夹。
通用
- 数据库:
~/.config/x-reader-plus/X-ReaderPlus/data/(Linux/Mac) 或%APPDATA%\x-reader-plus\(Win) - 首次启动自动创建示例书籍
- 不要手动修改数据库文件
- WebDAV 备份前先点击"测试连接"
📋 完整变更
详见 GitHub 提交记录。
© 2026 stop666. MIT License.
最后更新: 2026-06-28
v0.3.0
X-ReaderPlus v0.3.0
首个 Go 架构稳定版 — 完全脱机的现代化多格式桌面阅读器。
🆕 本版亮点
🏗️ 架构重写:Rust/Tauri → Go + HTTP
编译时间从 5-10 分钟降至 <1 分钟。后端从 587 个 Rust crate 精简为 6 个 Go 包。前端不变 (Vue 3 + Vuetify 3),通过 HTTP REST API 通信。
🗄️ 3 数据库分离存储
settings.db → 配置、主题、PIN
content.db → 章节内容、原始文件
meta.db → 书籍、书签、标注、回收站、历史、统计
🔍 全文搜索
跨书籍中文分词索引,实时搜索章节内容。
📝 完整标注系统
5 色高亮 + 下划线 + 笔记。跨章节管理,搜索定位。
🎯 全新专注模式
60% 不透明度遮罩覆盖阅读区,屏幕中央段落自动加粗高亮,随滚动实时追踪。
☁️ WebDAV 加密备份
文件名 URL-safe 混淆,文件内容 AES-256-GCM 加密。PBKDF2 60 万次密钥派生,密钥永不留存。换设备只需输入密码即可恢复。
📖 阅读进度记忆
临时退出自动保存章节和滚动位置。再次打开精确恢复。
🔧 60+ 项修复
- 修复专注模式覆盖层错位
- 修复导出功能(支持原始格式下载)
- 修复历史/统计持久化
- 修复批量删除计数
- 修复章节导航滚动恢复
- 修复页面过渡动画
- 修复进度条百分比
- 修复返回按钮无响应
- 全 CSP 安全策略加固
📦 下载
我该下哪个?
| 你的电脑 | 下载这个 |
|---|---|
| Windows 64 位(大多数电脑) | X-ReaderPlus-win-x64 |
| Windows 32 位(老电脑) | X-ReaderPlus-win-x86 |
| Windows ARM(Surface Pro X 等) | X-ReaderPlus-win-arm64 |
| Windows 不想折腾 → 解压即用 | X-ReaderPlus-win-portable.zip |
| Mac Intel 芯片(2020 年前) | X-ReaderPlus-mac-intel |
| Mac Apple Silicon(M1/M2/M3) | X-ReaderPlus-mac-apple |
| Linux x86_64 | X-ReaderPlus-linux-amd64 |
| Linux ARM64(树莓派等) | X-ReaderPlus-linux-arm64 |
不确定? Windows 用户一律推荐
X-ReaderPlus-win-portable.zip,解压双击即用。Mac 用户去「关于本机」看处理器是 Intel 还是 Apple。
⚠️ 安装注意事项
Windows
- 便携版 (
win-portable.zip):解压到任意目录(推荐D:\X-ReaderPlus),双击X-ReaderPlus.exe。 - 单文件版 (
win-x64/win-x86/win-arm64):需放在包含dist/目录的文件夹中(dist/来自解压便携版后的目录)。 - 如遇 Windows Defender 拦截,点击**"更多信息"→"仍要运行"**。本软件开源无毒。
- 不要放在系统保护目录(
C:\Program Files、C:\Windows),否则无法写入数据。 - 首次运行自动创建数据库
%APPDATA%\x-reader-plus\X-ReaderPlus\data\。
macOS
- 下载后在终端执行:
chmod +x X-ReaderPlus-mac-apple # Apple Silicon chmod +x X-ReaderPlus-mac-intel # Intel
- 首次运行提示"无法验证开发者"→ 系统设置 → 隐私与安全性 → 仍要打开。
- 需与
dist/目录放在同一文件夹。
Linux
-
chmod +x X-ReaderPlus-linux-x64 ./X-ReaderPlus-linux-x64
- Ubuntu/Debian 需安装依赖:
sudo apt install libgtk-3-0 libwebkit2gtk-4.1-0
- 需与
dist/目录放在同一文件夹。
通用
- 数据库:
~/.config/x-reader-plus/X-ReaderPlus/data/(Linux/Mac) 或%APPDATA%\x-reader-plus\(Win) - 首次启动自动创建示例书籍
- 不要手动修改数据库文件
- WebDAV 备份前先点击"测试连接"
📋 完整变更
详见 GitHub 提交记录。
© 2026 stop666. MIT License.
X-ReaderPlus v0.2.0
X-ReaderPlus v0.2.0
Bug 修复与功能增强版本——修正 18 个问题 + 新增 PDF Canvas、CBT 漫画、EPUB 增强、全文索引、标注导出、编码增强、性能优化、快捷键全面可配。
下载
| 平台 | 文件 | 说明 |
|---|---|---|
| Windows 安装版 | X-ReaderPlus.Setup.0.2.0.exe |
安装版,适用绝大多数 PC(x64) |
| Windows 便携版 x64 | X-ReaderPlus-0.2.0-win.zip |
解压即用,可放 U 盘 |
| Windows 便携版 32位 | X-ReaderPlus-0.2.0-ia32-win.zip |
适用老电脑 |
| Windows 便携版 ARM | X-ReaderPlus-0.2.0-arm64-win.zip |
适用 ARM 芯片笔记本 |
| macOS (ARM) | X-ReaderPlus-0.2.0-arm64.dmg |
拖入 Applications 文件夹 |
| Linux | X-ReaderPlus-0.2.0.AppImage |
chmod +x 后直接运行 |
🔴 严重 Bug 修复
阅读时间统计修复
阅读时间被严重多计——定时器每30秒保存一次增量,退出时又保存累计值,导致45秒被记录为75秒。现已引入 lastSavedSeconds 增量追踪,每次仅保存未计入的增量部分。
漫画格式声明修正
项目曾声称支持 CBR、CBT、CB7 格式,但实际只解析成占位文本。各格式现返回明确的说明信息,解释格式限制并给出转换为 CBZ 的操作指引。
DJVU 文本解压修复
DJVU TXTz chunks 使用 DEFLATE 压缩,但解压函数直接返回原始数据。现使用浏览器内置 DecompressionStream('deflate-raw') 进行真正解压,大幅提升文本提取质量。
文件路径安全验证增强
isValidFilePath 无法拦截 C:\Windows\... 风格路径。现已增加 .. 遍历检测、绝对路径解析、C:\Windows/C:\Program Files 等系统目录拦截。
文件读取 Buffer 截断修复
file:read 和 file:readBatch 直接使用 buffer.buffer,可能包含超出实际数据的尾部垃圾。改为 buffer.buffer.slice(byteOffset, byteOffset + byteLength) 精确传输。
🆕 功能增强
EPUB 内嵌图片渲染 ✨
EPUB 章节中的 <img> 标签现在会被解析——从 EPUB zip 中提取对应图片文件,转换为 base64 data URI 内嵌到 HTML 中。封面图提取也同步修复了路径解析问题(/images/cover.jpg 这种绝对路径之前会丢失目录上下文)。
长章节懒渲染 ✨
10万字以上的长章节不再一次性渲染全部内容。使用 IntersectionObserver 监控可见区域,初始只渲染前 30 段,滚动到接近底部时自动加载下 20 段。万行章节流畅不卡。
MOBI/AZW3 编码增强
decodeAscii 替换为 decodeTextSegment——优先 UTF-8 解码,回退 GB18030(中文),最后兜底逐字节 ASCII。中文 MOBI 文件不再乱码。
PDF Canvas 逐页渲染 ✨
PDF 不再只有纯文本——使用 pdfjs-dist 将每页渲染为 PNG 图片,IntersectionObserver 按需加载可见页面。支持 500 页以内,缩放自适应屏幕清晰度。渲染失败自动回退到文本模式。
EPUB 图片渲染增强 ✨
- SVG 支持:内嵌
<svg>标签中的<image>引用自动转为 data URI - 路径规范化:
../Images/photo.jpg等递归相对路径正确解析 - 封面 guide 回退:
<meta name="cover">找不到时从<guide>中查找封面
全文倒排索引 ✨
新建 search-index.ts 搜索引擎——为章节内容预建倒排索引(中文逐字、英文分词),搜索从 O(n) 全文扫描优化为索引查找。500+本书库搜索秒级响应。索引在导入时自动构建,启动时异步补齐缺失。
CBZ/CBT 漫画图片翻页 ✨
CBZ(ZIP)和 CBT(TAR)漫画从压缩包中提取图片——JPG/PNG/GIF/WebP/BMP 转为 base64 逐页渲染。支持自然排序,200 张图片限制防内存溢出。CBR/CB7 提示转换方法。
标注导出 Markdown/CSV ✨
设置→数据管理中新增"导出标注"按钮。Markdown 格式按书分组含颜色标记原文笔记,CSV 格式含书名/章节/颜色/文本/笔记/日期字段。支持 Electron 保存对话框和浏览器 Blob 下载。
编码支持增强
TXT 解析器新增 ISO-2022-JP 和 EUC-TW 编码检测,覆盖更多日文和繁中老旧文本文件。
快捷键可视化面板 ✨
设置→快捷键中新增可视化总览面板——以 kbd 标签分拆展示组合键,全局快捷键(蓝色)和阅读器快捷键(紫色)分区展示。内置冲突检测,重复绑定时红色警告 + 脉冲动画。
🟠 重要改进
选中文字标注偏移量精确计算
标注偏移量之前使用 indexOf 在 HTML 文本中搜索,遇到重复文字会错位。现改用基于 Range API 的精确计算——通过 TreeWalker 遍历选区之前的文本节点累加偏移,无论相同文字出现多少次都能正确定位。
阅读计时器窗口隐藏时暂停
setInterval 在 Electron 窗口最小化时仍然运行,导致未阅读时时间也持续累积。现已监听 visibilitychange 事件,页面隐藏时暂停计时器,恢复时继续。
EPUB 封面路径解析修复
resolvePath 函数处理以 / 开头的相对路径时有 bug——直接 slice(1) 丢失了 rootDir 上下文。现改为相对于 rootDir 解析绝对路径。
🟡 其他改进
导出备份包含加密密钥
备份文件现在会保存 AES 加密密钥。换了电脑恢复备份时,之前加密的内容可以正确解密读取。
主题加载无闪烁
修复了应用启动时的主题闪烁问题。之前 watch 的 immediate: true 在数据加载前先用默认主题渲染,加载后再覆盖,产生可见闪烁。
书架页面避免重复加载
App.vue 已调用 loadAllData() 全局加载,书架页 onMounted 无需重复加载。现检查数据是否已就绪,已加载则跳过。
背景图片 URL 验证
bgImageUrl 设置现只允许 http://、https:// 和 data: URI,拒绝任意输入。
应用图标路径修复
Electron 窗口和托盘图标引用从 icon.png 修正为实际存在的 icon.svg。
日志统一
BookshelfView 和 ReaderView 中的 console.error 调用已统一替换为 logger.error。
CSP 安全增强
添加 object-src 'none' 禁用插件执行。自定义 CSS 注入过滤——移除含 url() 和 @import 的规则,防止数据外泄。
数据库 Schema 整理
移除重复的 v1 schema 定义,添加清晰的版本迁移注释,为未来 IndexedDB 升级做好准备。
书架性能优化
100+本书不再卡顿——封面自动压缩为 200×300px 缩略图(~20KB/张),50本分页加载,content-visibility 跳过屏外渲染。封面加载失败自动显示彩色占位符。
书架功能增强
- 按章节数排序:新增"章节数 多→少 / 少→多"排序选项
- 倒序一键切换:排序器旁新增翻转按钮,点击即反向
快捷键全面可配
所有阅读器快捷键均可自定义——章节导航、搜索、翻页不再硬编码。设置→快捷键中新增 章节开头/章节末尾 绑定项,国际标准键盘布局完全兼容。
📋 v0.2.0 审计修复(2026-06-25)
全面代码审计发现 9 个 Critical + 12 个 High 问题,均已在当前版本中修复。
🔴 严重修复
| 问题 | 文件 | 说明 |
|---|---|---|
| 导航阻塞 | ReaderView.vue |
onBeforeRouteLeave 3参数签名(Vue Router 3 遗留)导致 _next 回调永不触发,返回按钮永久失效 |
| 书签/标注损坏 | reader.ts |
loadBookmarks/loadAnnotations 赋值原始 [{id,data}] 行,未 JSON.parse(data),所有书签属性返回 undefined |
| 封面未压缩 | bookshelf.ts |
compressCover()(200×300 JPEG 0.6)从未调用,封面原图存储浪费空间 |
| DB Handler 缺 safeHandler | main.ts |
18 个 IPC handler(bookmarks/annotations/trash/libraries)无错误包裹,DB异常→未处理 rejection |
| electronAPI! 无检查 | 3 文件 | 7 处 ! 非空断言无 null guard |
| 阅读进度静默丢失 | ReaderView.vue |
4 处 catch {} 吞没持久化失败,无日志 |
🟠 重要修复
| 问题 | 说明 |
|---|---|
| 主进程无全局异常 | 添加 uncaughtException + unhandledRejection 处理器 |
| 无导航防护 | 添加 will-navigate 事件 + setWindowOpenHandler |
workerParse 返回 any |
改为 Promise<ParsedBook> |
| 字典重复 key | 合并 right/open 等 6 个多义词 duplicate key |
🟡 改进
- 46→12 个 vue-tsc 错误(剩余全为 Vuetify 组件类型兼容/Dexie 回退路径)
ReadingShortcuts添加 index signature 修复快捷键索引类型dev.ts添加 Vite client 类型引用- 所有空
catch {}添加注释说明
📋 v0.2.0 第二次审计修复(2026-06-25)
第二次深度审计,聚焦数据删除完整性、存储一致性、原生模块兼容性。修正 10 个问题。
🔴 严重修复
| 问题 | 文件 | 说明 |
|---|---|---|
| 原生模块 ABI 不匹配 | main.ts / package.json |
升级 Electron 31→42 后 better-sqlite3 未重建,NODE_MODULE_VERSION 不匹配导致全部数据库操作静默失败。已执行 @electron/rebuild + 添加 postinstall/rebuild 脚本 |
| 永久删除不清理关联数据 | main.ts |
db:trash:delete 仅删回收站记录,不清理 chapters/bookmarks/annotations/CBZ 缓存。新增 db:trash:permanentDelete、db:trash:batchPermanentDelete handler,级联清理所有关联数据 |
| 导入数据静默丢失 | SettingsView.vue |
api.lib.put(id,data) 错误传两参数给 books.insert(book) — insert 只接受单 Book 对象,第二个参数(JSON 字符串)被丢弃。导入进度条显示 100% 但数据未写入 |
🟠 重要修复
| 问题 | 说明 |
|---|---|
| 双存储数据不一致 | NotesView/SettingsView 的 api.bm.put/api.ann.put 使用不存在的 put() 方法(应为 insert),?. 可选链静默回退 Dexie IndexedDB。阅读器从 SQLite 读写→书签/标注对用户不可见 |
db:bookmarks:getAll 缺失 |
书签导出/备份功能无法从 SQLite 读取,始终回退 IndexedDB。新增 handler + preload 桥接 |
db:trash:clear 不清理关联数据 |
清空回收站仅执行 DELETE FROM trash,章节/书签/标注成为孤儿数据 |
db:clearAll 遗留缓存 |
清除全部数据时不删除 CBZ 图片缓存目录 |
🟡 改进
- 12→4 个 vue-tsc 错误(均为 Vuetify 组件类型兼容,不影响运行)
bookshelf.deleteBooks改为乐观删除 + IPC 错误检测,避免失败时静默回退TrashView所有永久删除操作新增进度条反馈- ReaderView 移除重复的
teardownPdfPageObserver()调用 - 新增
package.jsonrebuild/postinstall脚本确保原生模块自动重建
书架
- 网格 / 列表双视图,封面尺寸三档可调
- 拖拽批量导入,复制导入 / 文件夹引用两种模式
- 多书库管理,全部书库聚合视图
- 书名作者搜索、标签筛选、7 种排序方式
- 批量选择(全选 / 反选 / 删除),删除进回收站
- 书籍详情:评分、短评、标签编辑
阅读器
- 16 种格式支持:EPUB / TXT / Markdown / HTML / MOBI / AZW3 / FB2 / DJVU / DOCX / RTF / ODT / PDF / CBZ
- CBR / CBT / CB7 识别并提示转换方法
- 分章节阅读,智能章节检测(中文 / 英文 / 序言 / 番外等)
- 智能作者识别 + 自动标签识别
- 章节导航:按钮 / 键盘 / 屏幕边缘点击 / 底部滑块
- 阅读位置持久化——跨会话记忆
- 已读章节打勾,目录面板实时标记
- 专注模式——仅高亮当前段落
- 排版微调:字号、行距、段距、缩进、字重、字体、边距、页宽
- 3 种主题:明亮 / 暗黑 / 护眼,主题颜色可深度自定义
- Ctrl+滚轮缩放,工具栏自动隐藏
- 全文搜索、自动滚屏、虚拟滚动
- 阅读统计浮窗
标注与笔记
- 划词高亮(6 色)+ 划词笔记
- 复制 / 查词典
- 全局笔记管理——按书/关键词筛选、笔记跳转定位
- 笔记软删除可恢复
词典
- 书库全文搜索
- 在线英文词典(dictionaryapi.dev)
- 内置中英互译词典
安全
- 完全脱机——数据 100% 本地 IndexedDB
- PIN 码保护——SHA-256 + PBKDF2(60万次迭代)+ AES-256-GCM
- 两级锁定策略、安全问题重置 PIN
- HTML 净化(DOMPurify)+ 严格 CSP
桌面特性
- 无边框自定义窗口 + 系统托盘
- 老板键(Ctrl+B)、命令面板(Ctrl+K)
- 开机自启 + 启动最小化到托盘
- WebDAV 云备份、数据导出/导入
其他
- 阅读统计、阅读历史、回收站
- Web Worker 多线程解析
- SHA-256 内容去重
- 10 种编码自动检测、批量分块操作
技术栈
Vue 3 + TypeScript + Vite 6 + Electron 42 + Vuetify 3 + SQLite (better-sqlite3) + vue-i18n + Web Crypto API
作者
stop666 — 完全免费,开源(MIT),严禁倒卖。
捐赠 USDT(ETH/ERC20 / BSC/BEP20):
0xbB515f953e16f0a7b51f537BB1DAB6fbB6026533
注意
- 不支持 DRM 保护的书籍
- macOS 首次打开需去「系统设置 → 隐私与安全性」放行
- Windows SmartScreen 弹窗点「更多信息 → 仍要运行」
- Linux 需要
chmod +x给执行权限
X-ReaderPlus v0.1.0
X-ReaderPlus v0.1.0
完全脱机的现代化多格式电子书阅读器,首个正式版本。
下载
| 平台 | 文件 | 说明 |
|---|---|---|
| Windows 64位 | X-ReaderPlus Setup x.x.x.exe |
安装版,适用绝大多数 PC |
| Windows 32位 | X-ReaderPlus Setup x.x.x.exe |
安装版,适用老电脑 |
| Windows ARM | X-ReaderPlus Setup x.x.x.exe |
安装版,适用 ARM 芯片笔记本 |
| Windows 便携版 | X-ReaderPlus-x.x.x-win.zip |
解压即用,可放 U 盘 |
| macOS | X-ReaderPlus-x.x.x.dmg |
拖入 Applications 文件夹 |
| Linux | X-ReaderPlus-x.x.x.AppImage |
chmod +x 后直接运行 |
功能
书架
- 网格 / 列表双视图,封面尺寸三档可调
- 拖拽批量导入,复制导入 / 文件夹引用两种模式
- 多书库管理,全部书库聚合视图
- 书名作者搜索、标签筛选、7 种排序方式
- 批量选择(全选 / 反选 / 删除),删除进回收站
- 书籍详情:评分、短评、标签编辑
阅读器
- 16 种格式支持:EPUB / TXT / Markdown / HTML / MOBI / AZW3 / FB2 / DJVU / DOCX / RTF / ODT / PDF / CBR / CBZ / CBT / CB7
- 分章节阅读,智能章节检测(中文 / 英文 / 序言 / 番外等)
- 智能作者识别(扫描前 40 行 + 后 15 行)
- 自动标签识别(#标签 / 标签:等格式,前 100 行)
- 章节导航:按钮 / 键盘方向键 / 屏幕边缘点击 / 底部滑块
- 阅读位置持久化——关闭重开回到精确位置,跨会话记忆
- 已读章节打勾,目录面板实时标记
- 专注模式——仅高亮当前段落,其余渐隐
- 排版微调:字号(12-32)、行距、段距、缩进、字重、字体、边距、页宽
- 3 种主题:明亮 / 暗黑 / 护眼,主题颜色可深度自定义
- Ctrl+滚轮缩放,工具栏 4 秒自动隐藏
- 全文搜索(关键词高亮 + 结果导航)
- 自动滚屏(可调速)
- 虚拟滚动——万行长章节流畅不卡
- 阅读统计浮窗:阅读速度、预计剩余、全书进度
标注与笔记
- 划词高亮(6 色:黄绿蓝红橙紫),颜色即时生效
- 划词笔记——给选中的文字写批注
- 复制 / 查词典(在线 + 内置 250+ 词中英互译)
- 全局笔记管理——按书 / 关键词筛选
- 笔记跳转定位——红色背景居中高亮原文位置
- 笔记回收站——软删除可恢复
- 批量选择、编辑、删除
词典
- 书库全文搜索——标题 / 标签 / 正文 / 笔记可选范围
- 在线英文词典(dictionaryapi.dev)
- 内置 250+ 词中英互译词典
- 词性彩色徽章,最近查询记录
安全
- 完全脱机——数据 100% 存储本地 IndexedDB
- PIN 码保护——SHA-256 + PBKDF2(60 万次迭代)+ AES-256-GCM 加密
- 两级锁定策略——可配置错误次数和锁定时间
- 安全问题重置 PIN
- HTML 净化(DOMPurify)+ 严格 CSP
桌面特性
- 无边框自定义窗口 + 系统托盘
- 老板键(Ctrl+B)一键隐藏
- 命令面板(Ctrl+K)全局搜索
- 开机自启 + 启动最小化到托盘
- WebDAV 云备份——自动备份(每天/每周/每月)
- 数据导出 / 导入(加密备份)
其他
- 阅读统计(藏书量、总字数、格式分布、阅读时长)
- 阅读历史 + 已删除标记
- 启动加载进度条
- Web Worker 多线程解析——导入不卡 UI
- 内容去重——SHA-256 哈希检测重复书籍
- 10 种编码自动检测
- 批量分块操作——删除数千本不卡
技术栈
Vue 3 + TypeScript + Vite + Electron 31 + Vuetify 3 + IndexedDB (Dexie.js) + Web Crypto API
作者
stop666 — 完全免费,开源(MIT),严禁倒卖。
捐赠 USDT(ETH/ERC20 / BSC/BEP20):
0xbB515f953e16f0a7b51f537BB1DAB6fbB6026533
注意
- 不支持 DRM 保护的书籍
- macOS 首次打开需去「系统设置 → 隐私与安全性」放行
- Windows SmartScreen 弹窗点「更多信息 → 仍要运行」
- Linux 需要
chmod +x给执行权限