雨见浏览器PC测试版1.5.6
本阶段(1.5.5 → 1.5.6)的主线是「**书签云同步完善**」。围绕防止误删丢书签做了成套补齐:清空「移动书签」「桌面书签」或全部书签时先弹确认,可选**删除并清空云端**(服务端专用接口写墓碑,其他设备同步时一并删除,中断可断点续传);**移动书签也有云备份**了,备份列表与恢复按桌面/移动分开,移动书签恢复按云端快照整体覆盖;同步失败不再默默吞掉——按**网络/保护中止/服务端/未登录**分类,书签管理器侧栏显示警告卡片并可一键重试,桌面与移动两部分同步互相独立、一侧失败不连坐另一侧。同步核心还重写了**记录规范化**,与服务端逐字节一致,修复 contentMd5 永远校验失败导致同步卡死的问题。性能上书签**多选删除改为批量一次删**并建立索引,几千条书签删除不再卡顿。此外,**扩展安装弹窗会识别同名不同来源的重复安装**(如 Edge 商店版与官网 CRX 版),支持一键替换或保留两者;chrome.bookmarks 的书签栏/其他书签/移动书签固定 ID(1/2/3)完成映射,硬编码这些 ID 的扩展可正常工作;主页搜索支持新标签页打开。
## 主要更新
### 1. 书签云同步完善
- **清空书签需确认,可连云端一起清**(`dd53bd4`、`cfa1982`):开启云同步后,删除操作若会让「移动书签」「书签栏 + 其他书签」(或全部书签)一个不剩,会先弹确认框说明——只在本机删,下次同步会从云端恢复回来;确定不要可选「**删除并清空云端**」,本机、云端以及其他已同步设备上的对应书签一并删除且无法撤销。云端清空走服务端专用接口写成墓碑(而非直接清空),手机/其他电脑同步时也会跟着删掉。
- **断点续传保护**(`dd53bd4`、`cfa1982`):确认清空后先落 `mobileClearPending`/`desktopClearPending` 标记再删本机,删到一半崩溃或断网,下次同步会继续推送清空而不是把书签从云端拉回来;云端清空失败时提示将在下次同步自动重试。
- **移动书签云备份与恢复**(`ccc4384`):「云同步与备份」面板的备份列表与恢复按**桌面 / 移动**两个分区独立展示;移动书签恢复以备份快照为权威覆盖本地移动树(缺失即删除),并放弃尚未完成的「清空移动书签」;恢复操作与常规同步共用互斥锁,避免恢复中途被旧快照的后台同步覆盖。
- **同步失败分类提示与重试**(`42d6b79`):同步失败按**网络问题 / 保护中止 / 服务端错误 / 未登录 / 其他**自动归因,书签管理器侧栏对应分区显示红色警告卡片,说明具体原因(本机为空但云端有历史、将大量删除本机书签等保护中止各有文案),提供「重试」按钮;每次同步成功/失败主进程广播状态,侧栏警告即时刷新。
- **桌面/移动同步互相独立**(`42d6b79`):桌面树与移动树分开跑同步,任一侧失败(例如桌面树为空触发全墓碑保护)不再中断另一侧的上传下载。
- **记录规范化对齐服务端**(`a50d8e8`):新增主进程与同步 worker 共用的规范化模块,与服务端 PHP 的 normalizeRecords + contentMd5 **逐字节一致**——PHP trim 字符集、孤立代理项替换 U+FFFD、标题按码点截断(emoji 不算两个)、parent_id 按字节截断、数值 PHP 强转等全部对齐;此前任何一处偏差都会让 contentMd5 永远校验失败、同步卡死。
### 2. 书签管理器性能
- **批量删除与索引化**(`d3d848d`):多选删除改为一次批量删完,不再逐条扫描整棵书签树 + 逐条广播刷新(几千条书签逐条删要几十秒,期间书签页还会把没删到的重新加载出来);书签管理器删除前先建 id/children 索引,子树展开、清空判定从 O(n²) 嵌套查找降为线性遍历,整段修改包在 @action 里只触发一次重渲染。
- **扩展事件对齐 Chrome**(`d3d848d`):`chrome.bookmarks.onRemoved` 只对被删子树的顶层节点发事件(与 Chrome 一致),批量删除前先取快照,避免扩展收到大量子孙节点事件。
### 3. 扩展兼容
- **重复安装检测**(`ff0bd12`):同一扩展从不同来源下载会得到不同 ID(如 ScriptCat 的 Edge 商店版与官网 CRX 版),此前会装成两个扩展同时运行;现在下载 CRX 弹「添加扩展」时,若发现**已安装同名扩展**(含已停用的、任意语言名称),会在弹窗中明确提示,并提供「**替换旧扩展**」(卸载旧扩展及其数据)与「**保留两者**」两个选择,默认焦点落在「保留两者」上防误触。
- **chrome.bookmarks 固定 ID 映射**(`783b536`):Chrome 的书签栏/其他书签/移动书签是固定 ID(1/2/3),扩展常直接硬编码(如 `chrome.bookmarks.get('1')`);本应用这三个内置文件夹此前是随机 ID,现在在扩展 API 边界做双向别名映射,事件的 parentId/oldParentId 也统一换成扩展视角 ID,硬编码固定 ID 的扩展可正常读写。
### 4. 主页搜索
- **新标签页打开**(`b7b9ff4`):主页搜索框与搜索结果支持 `target=_blank`,点开后在**新标签页**打开而不替换当前页;主页搜索结果链接(仅 http/https,经主进程校验)同样支持本页/新标签页两种方式;双栏搜索模式(dual)在新标签页打开时照常推送搜索桥接。
## 主要更新
### 1. 书签云同步完善
- **清空书签需确认,可连云端一起清**(`dd53bd4`、`cfa1982`):开启云同步后,删除操作若会让「移动书签」「书签栏 + 其他书签」(或全部书签)一个不剩,会先弹确认框说明——只在本机删,下次同步会从云端恢复回来;确定不要可选「**删除并清空云端**」,本机、云端以及其他已同步设备上的对应书签一并删除且无法撤销。云端清空走服务端专用接口写成墓碑(而非直接清空),手机/其他电脑同步时也会跟着删掉。
- **断点续传保护**(`dd53bd4`、`cfa1982`):确认清空后先落 `mobileClearPending`/`desktopClearPending` 标记再删本机,删到一半崩溃或断网,下次同步会继续推送清空而不是把书签从云端拉回来;云端清空失败时提示将在下次同步自动重试。
- **移动书签云备份与恢复**(`ccc4384`):「云同步与备份」面板的备份列表与恢复按**桌面 / 移动**两个分区独立展示;移动书签恢复以备份快照为权威覆盖本地移动树(缺失即删除),并放弃尚未完成的「清空移动书签」;恢复操作与常规同步共用互斥锁,避免恢复中途被旧快照的后台同步覆盖。
- **同步失败分类提示与重试**(`42d6b79`):同步失败按**网络问题 / 保护中止 / 服务端错误 / 未登录 / 其他**自动归因,书签管理器侧栏对应分区显示红色警告卡片,说明具体原因(本机为空但云端有历史、将大量删除本机书签等保护中止各有文案),提供「重试」按钮;每次同步成功/失败主进程广播状态,侧栏警告即时刷新。
- **桌面/移动同步互相独立**(`42d6b79`):桌面树与移动树分开跑同步,任一侧失败(例如桌面树为空触发全墓碑保护)不再中断另一侧的上传下载。
- **记录规范化对齐服务端**(`a50d8e8`):新增主进程与同步 worker 共用的规范化模块,与服务端 PHP 的 normalizeRecords + contentMd5 **逐字节一致**——PHP trim 字符集、孤立代理项替换 U+FFFD、标题按码点截断(emoji 不算两个)、parent_id 按字节截断、数值 PHP 强转等全部对齐;此前任何一处偏差都会让 contentMd5 永远校验失败、同步卡死。
### 2. 书签管理器性能
- **批量删除与索引化**(`d3d848d`):多选删除改为一次批量删完,不再逐条扫描整棵书签树 + 逐条广播刷新(几千条书签逐条删要几十秒,期间书签页还会把没删到的重新加载出来);书签管理器删除前先建 id/children 索引,子树展开、清空判定从 O(n²) 嵌套查找降为线性遍历,整段修改包在 @action 里只触发一次重渲染。
- **扩展事件对齐 Chrome**(`d3d848d`):`chrome.bookmarks.onRemoved` 只对被删子树的顶层节点发事件(与 Chrome 一致),批量删除前先取快照,避免扩展收到大量子孙节点事件。
### 3. 扩展兼容
- **重复安装检测**(`ff0bd12`):同一扩展从不同来源下载会得到不同 ID(如 ScriptCat 的 Edge 商店版与官网 CRX 版),此前会装成两个扩展同时运行;现在下载 CRX 弹「添加扩展」时,若发现**已安装同名扩展**(含已停用的、任意语言名称),会在弹窗中明确提示,并提供「**替换旧扩展**」(卸载旧扩展及其数据)与「**保留两者**」两个选择,默认焦点落在「保留两者」上防误触。
- **chrome.bookmarks 固定 ID 映射**(`783b536`):Chrome 的书签栏/其他书签/移动书签是固定 ID(1/2/3),扩展常直接硬编码(如 `chrome.bookmarks.get('1')`);本应用这三个内置文件夹此前是随机 ID,现在在扩展 API 边界做双向别名映射,事件的 parentId/oldParentId 也统一换成扩展视角 ID,硬编码固定 ID 的扩展可正常读写。
### 4. 主页搜索
- **新标签页打开**(`b7b9ff4`):主页搜索框与搜索结果支持 `target=_blank`,点开后在**新标签页**打开而不替换当前页;主页搜索结果链接(仅 http/https,经主进程校验)同样支持本页/新标签页两种方式;双栏搜索模式(dual)在新标签页打开时照常推送搜索桥接。
· 0 个赞