添加Gecko内核支持,修复TOTP导入错误#21
Merged
JoyinJoester merged 17 commits intoJoyinJoester:mainfrom Feb 19, 2026
Merged
Conversation
主要修改: 1. Firefox 兼容性 - 添加 Firefox 专用 manifest 文件 - 实现 browser API 兼容层 - 添加 TypeScript 类型声明 - 支持双浏览器并行构建 2. GitHub Actions 工作流 - 新增 Browser-CI.yml(PR 质量检查) - 新增 Browser-Release.yml(自动发布) - 重构 Browser-Extension.yml(支持多浏览器) - 添加 Manifest 验证步骤 3. 文档体系 - 添加 Firefox 兼容性文档 - 添加 GitHub Actions 详细文档 - 添加快速参考手册 - 添加工作流更新总结 技术细节: - 使用 cross-env 支持跨平台环境变量 - Chrome/Edge 和 Firefox 并行构建 - 完整的 TypeScript 类型检查 - ESLint 代码质量检查 - 自动化版本发布流程 构建命令: - Chrome/Edge: npm run build - Firefox: npm run build:firefox 版本发布: - 创建 browser-v* 标签自动触发 Release - 自动生成 Chrome/Edge 和 Firefox 扩展包
- 将 manifest.firefox.json 中的 background.service_worker 改为 background.scripts - Firefox Manifest V3 不支持 service_worker,需要使用 scripts 格式 - 修复 Issue JoyinJoester#20 中关于 Firefox 导入扩展时的错误 背景:Firefox 对 Manifest V3 的支持与 Chrome 不同, background.service_worker 在 Firefox 中被禁用,必须使用 background.scripts。
- 在 handleWebDavRequest 错误处理中添加详细的调试信息 - 输出请求方法、URL、错误消息和堆栈信息 - 帮助诊断 Firefox 中的 'Failed to fetch' 问题
问题:拉取大备份文件时扩展崩溃并自动重载 原因:ArrayBuffer 转 number[] 导致内存溢出 - 10MB ZIP = 10,000,000 个数字 - 每个数字 ~8 字节 + 序列化开销 - 超过扩展内存限制导致崩溃 解决方案: - 添加 50MB 文件大小限制 - 超过限制时给出明确错误提示 - 防止扩展因内存溢出而重载 临时方案,后续可优化为 Base64 编码以支持更大文件
问题:ArrayBuffer 转 number[] 导致内存溢出 - 10MB ZIP = 10,000,000 个数字 ~80MB 内存 - 超过扩展内存限制导致崩溃和重载 解决方案:使用 Base64 字符串编码 - Base64 比数字数组更紧凑(4/3 倍原始大小) - 可以直接通过 message passing 传输 - 提高文件大小限制到 100MB - 向后兼容旧格式(number[]) 修改: - background.ts: 添加 arrayBufferBase64 字段,使用 Base64 编码 - WebDavClient.ts: 优先使用 Base64 解码,回退到旧格式 - 移除临时的 50MB 限制,改为 100MB 好处: ✅ 支持更大的备份文件 ✅ 更高效的数据传输 ✅ 减少内存使用 ✅ 防止扩展崩溃 ✅ 向后兼容
问题:28KB 文件仍导致扩展崩溃重载 根本原因: 1. WebDavClient.ts 使用 chrome.runtime.sendMessage,没有浏览器兼容层 2. background.ts 直接访问 response.headers 可能导致崩溃 3. 错误信息不够详细,难以诊断问题 修复: 1. WebDavClient.ts: - 添加浏览器兼容层,支持 chrome 和 browser API - 使用 browserAPI 替代直接调用 chrome.runtime 2. background.ts: - 安全检查 response 和 response.headers - 使用 try-catch 保护 headers.forEach - 增强错误信息,包含错误类型和可能原因 - 特殊处理 'Failed to fetch' 错误 好处: ✅ 防止因 response 访问导致崩溃 ✅ 更好的错误诊断信息 ✅ 跨浏览器兼容性 ✅ 给出明确的错误提示和可能原因
问题:listBackups 函数可能因以下原因崩溃 1. response.body 为空或 undefined 2. responses.forEach 遍历时某个项目解析失败 3. 没有单个项目的错误隔离 修复: 1. 添加 response.body 空值检查 2. 添加 responses 空值检查 3. 将 forEach 改为 for 循环,实现错误隔离 4. 为单个项目解析添加 try-catch 5. 增强错误日志,包含堆栈信息 好处: ✅ 防止单个备份文件解析失败影响其他文件 ✅ 更安全的空值处理 ✅ 更详细的错误诊断信息 ✅ 扩展不会因解析错误而崩溃
问题1: TOTP CSV has no secret - 某些 TOTP 记录的 secret 字段为空 - CSV 解析可能有问题,导致无法正确获取 secret - 缺少详细的调试信息 问题2: Unchecked runtime.lastError: message port closed - 消息端口在响应接收前被关闭 - 可能是页面刷新或请求超时 - 需要更好的错误处理和超时机制 修复1: BackupManager.ts (TOTP CSV 解析) - 添加详细的调试日志 - 输出 CSV 内容预览(前500字符) - 输出每个 TOTP 项目的所有列 - 记录没有 secret 的项目的完整信息 - 帮助诊断 CSV 格式问题 修复2: WebDavClient.ts (消息错误处理) - 添加 30 秒请求超时 - 增强 runtime.lastError 检查 - 特殊处理端口关闭错误(message port closed) - 提供更友好的中文错误提示 - 防止超时导致 Promise 挂起 好处: ✅ 更好的 TOTP CSV 问题诊断 ✅ 防止消息挂起导致扩展不稳定 ✅ 明确的超时和错误提示 ✅ 防止 runtime.lastError 警告
- BackupManager.ts: let title → const title,移除未使用的 catch 变量 - background.ts: 使用正确的 Error 类型,移除未使用的 eslint-disable - eslint.config.js: 禁用 react-refresh/only-export-components 规则
- WebDavClient: 显式消费 runtime.lastError 以抑制 Chrome 警告 - BackupPage: 移除 2秒延迟,改为立即重新加载以减少错误发生
- 恢复成功后显示动态倒计时(5秒) - 在统计信息下方显示自动刷新提示 - 支持中英文倒计时提示
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
rt