雨见浏览器PC测试版1.3.2
本阶段(1.3.1 → 1.3.2)的更新以「**密码云同步**」为绝对主线——一套端到端加密、带防误删安全闸、可与 Android / 鸿蒙端对齐的多设备密码同步能力一次性落地(11 个提交、约 3500 行),修订号 / 墓碑同步引擎、混合传输加密、大规模删除的「安全模式」拦截、本地变更版本化与同步排队、以及账号级开关与登录页引导的完整闭环;后端也借机做了一次整体初始化梳理并新增热搜能力。书签侧承接上一阶段的余势,把书签栏 / 浮层 / 文件夹菜单的拖拽与布局收敛为一套统一、轻量、连贯的体验(独立虚影跟手、长按 / 阈值双触发、子菜单动态高度)。此外还新增了「选中文本右键搜索」、下载按钮三态可见性、下载速度归一化、winreg 原生消息主机解析(KeePassXC 等),并在渲染进程崩溃页补上了「复制诊断信息」、为扩展消息总线补上了不会污染日志的 `safe-send` 通道。
## 主要更新
### 1. 密码云同步:端到端加密 + 防误删安全闸 + 多端对齐
本阶段体量最大的改动,目标是让用户在 PC 上保存的密码能像 Chrome / Edge 那样跨设备同步,同时把「云同步」这件事做到「即便服务器也看不到明文」「误删不会瞬间清空所有设备」这两条硬约束之上:
### 2. 后端整体初始化 + 新增热搜
- `3f337ea` 对 PHP 后端做了一次成体系的初始化梳理(46 个文件),统一各控制器(`Bookmark` / `Bookmarkv2` / `History` / `User` / `Upload` / `Crx` / `Navigation` / `Websitesubscribe` / `Qrcodebynet` 等)的基础加载与公共逻辑,并新增独立的 `Hotsearch.php`(660 行)承载热搜能力,为后续多端共享数据与服务化打基础。
### 3. 书签交互大升级:拖拽重写 + 浮层统一 + 子菜单动态化
承接上一阶段的书签主线,把书签栏 / 书签浮层 / 文件夹菜单的拖拽与布局收敛为一套统一、轻量、连贯的体验:
- **书签栏拖拽重做**:删除原先基于 FLIP 的整套动画体系(邻居布局快照、被拖项跟手累计位移、松手归位 `anime` 实例及其互相覆盖抖动),改为「**独立虚影跟手**」——按下并移动超过阈值后 `cloneNode` 复制一份挂到页面顶层,半透明、关闭指针事件、启用 GPU 合成,按光标相对按下点的偏移贴住光标,**原书签始终留在槽位**;落点只在松手时一次性计算并提交,代码净减约 75 行,跟手更轻盈。
- **书签浮层拖拽从零实现**:书签「更多」浮层与子文件夹浮层里,每一项可**长按(180ms)或按住拖动(超过 4px)**拎起,在同级里重新排序或拖进文件夹;落点检测走 DOM 标记驱动(`data-bookmark-*` + `elementFromPoint` + `closest`),文件夹中心高亮为「放入」,带循环目录防护(沿父链查禁塞进自己的后代)与幽灵点击抑制(拖完吞掉紧随的 click)。
- **文件夹下拉菜单收编进统一浮层**:原先走原生 `Menu`、列表项不是 DOM 无法右键 / 拖拽,现改为与「更多」按钮共用同一个多列浮层,只多传一个 `align` 参数(`'start'` 向右展开 / `'end'` 向左展开);从此所有书签列表项都是 DOM,右键编辑 / 删除、长按拖拽在文件夹菜单里同样可用。
- **子菜单面板动态化 + 拖入即时生效**:子文件夹菜单高度随内容行数与窗口可用高度自适应、溢出可滚;拖书签进文件夹后被拖项立即从根面板与已展开子菜单中消失(本地对被拖项、原父级 `children`、目标 `children` 三处原子更新),再异步落库,所见即所得。
- **IPC 边界序列化加固**:新增统一的 `snapshotBookmarkForIpc` / `snapshotBookmarksForIpc`,在 IPC 边界显式只保留原始字段并对每个字段做 `typeof` 守卫,从源头杜绝 MobX observable proxy 在 structured clone 时抛「An object could not be cloned」。
### 4. 标签交互新设置:右键关闭 + 隐藏关闭按钮
新增两个外观设置(「设置 → 外观」,紧跟「双击关闭标签页」之后,**默认关闭**):
- **右键关闭标签页和标签组**(`closeTabOnRightClick`):开启后在任意标签 / 标签组芯片上右键即关闭;按住 Shift 右键仍可调出原生右键菜单作为逃生舱。
- **隐藏标签栏关闭按钮**(`hideTabCloseButtons`):关闭按钮默认隐藏,只在鼠标悬停到该标签上时淡入,隐藏时同时设 `pointer-events: none`,避免幽灵热区误触。
- 两个开关**跨五处 UI 一致生效**:顶部标签栏、左侧栏标签、标签组芯片、侧边栏分组表头,以及独立打包的侧边栏浮层面板(设置值随标签快照 payload 一并下发,不新增 IPC)。
### 5. 选中文本右键「搜索」
- 网页上选中文本后,右键菜单新增「搜索」项,使用用户当前设置的默认搜索引擎(`searchEngines[searchEngine]`,回退第一个,再回退 Google)把选中文本作为关键字打开搜索结果页;与既有的「问问雨见 AI / 加入知识库」等选中项并列,贴合 Chrome / Edge 习惯。
### 6. 下载按钮三态可见性 + 下载速度归一化
- **下载按钮三态可见性**:工具栏下载按钮从原来的「显示 / 隐藏」二态升级为 `always`(常显)/ `on-download`(仅下载中显示,默认)/ `hidden`(隐藏)三态(`DownloadVisibility`),并在「自定义工具栏」里给出独立控件;旧配置里放在 `hidden` 列的下载按钮会自动迁移到 `hidden` 态,不再重复保存。
- **下载速度归一化**:新增 `normalizeDownloadSpeed` 工具与 `MIN_DOWNLOAD_SPEED_BYTES_PER_SECOND` 常量,把非有限数、负数、过小的异常速度统一归 0;媒体下载器、会话服务、下载项组件、下载工具函数各调用点全量替换,消除「NaN / 负速率 / 抖动到极小值」导致的下载条 UI 异常。
### 7. winreg 原生消息主机解析(KeePassXC 等)
- 扩展框架内置的 winreg 解析器(`src/vendor/electron-chrome-extensions/browser/api/lib/winreg.ts`)重写,正确解析 Windows `reg query` 输出里的 native messaging host 清单(含中文系统下 `(默认)` / 乱码 GBK 表项、按指定字段名取值等情形),让浏览器能识别 KeePassXC 这类通过注册表登记的原生消息主机;配套新增 `scripts/test-winreg.js` 回归测试(用 TypeScript transpile 在线加载源码断言解析结果)。
- 同提交内扩展存储补丁与扩展更新器的会话扩展移除逻辑一并加固,并补上 `scripts/test-extension-storage-patch.js` 回归测试。
### 8. 稳定性与诊断
- **渲染进程崩溃页 + 复制诊断信息**:渲染进程崩溃(`render-process-gone`)的恢复页(`network-error.html`)区分「渲染崩溃」分支,隐藏「网络诊断」按钮、改显「**复制诊断信息**」按钮,一键把崩溃时刻的 reason / exitCode / URL / 时间等拷到剪贴板方便反馈;`view.ts` 增加 `rendererCrashPageLoading` 防止恢复页自身再次崩溃时被误判为加载完成、反复清错态。
- **`safe-send` 通道**:扩展消息总线新增 `sendToLiveFrame` / `sendToLiveMainFrame`(`safe-send.ts`),针对「frame 在导航 / 拆卸竞态中被销毁」这一**预期内**的失败场景做静默吞咽——优先走 `WebFrameMain._send` 同步原生入口,跳过 Electron 公开 `send()` 在吞错前的日志输出,只在真正异常时才 `console.error`,避免正常切换页面时控制台被「Render frame was disposed」刷屏。
- **日志保留上限提升**:主进程文件日志(`logger.ts`)的最大保留份数上调,崩溃与诊断信息留存更久,便于回溯 packaged 环境下的问题。
## 体验与细节打磨
- **PWA 独立窗口视频全屏修复**:PWA 独立窗口此前点视频全屏会被静默拒绝——根因是它与普通标签共享 `persist:view` 会话却不在 `ViewManager` 管辖内,权限处理器对这类「无主」webContents 一律 `callback(false)`。现新增 `isAppModeWebContents` + 创建时一次性写入的 `WeakSet` 身份登记,「无主」分支里**仅当请求的是 `fullscreen` 且身份确属 PWA** 才放行,其余权限对 PWA 仍一律拒绝(最小授权);WeakSet 不持强引用,窗口关闭自动回收。
- **系统设置区加载态修复**:「设置 → 系统 → 数据存储位置」区块在数据异步加载完成前会闪现指向 `undefined` 路径的「恢复默认」按钮并可能触发渲染崩溃;补上与同文件其它位置一致的 `data &&` 存在性守卫,数据就绪前不再渲染该按钮。
- **拖拽落点视觉反馈统一**:书签栏与书签浮层的拖拽均采用蓝色插入线 + 文件夹整行高亮描边,深浅背景下都加了白色描边保证可见度,并随主题明暗自适应。
## 主要更新
### 1. 密码云同步:端到端加密 + 防误删安全闸 + 多端对齐
本阶段体量最大的改动,目标是让用户在 PC 上保存的密码能像 Chrome / Edge 那样跨设备同步,同时把「云同步」这件事做到「即便服务器也看不到明文」「误删不会瞬间清空所有设备」这两条硬约束之上:
### 2. 后端整体初始化 + 新增热搜
- `3f337ea` 对 PHP 后端做了一次成体系的初始化梳理(46 个文件),统一各控制器(`Bookmark` / `Bookmarkv2` / `History` / `User` / `Upload` / `Crx` / `Navigation` / `Websitesubscribe` / `Qrcodebynet` 等)的基础加载与公共逻辑,并新增独立的 `Hotsearch.php`(660 行)承载热搜能力,为后续多端共享数据与服务化打基础。
### 3. 书签交互大升级:拖拽重写 + 浮层统一 + 子菜单动态化
承接上一阶段的书签主线,把书签栏 / 书签浮层 / 文件夹菜单的拖拽与布局收敛为一套统一、轻量、连贯的体验:
- **书签栏拖拽重做**:删除原先基于 FLIP 的整套动画体系(邻居布局快照、被拖项跟手累计位移、松手归位 `anime` 实例及其互相覆盖抖动),改为「**独立虚影跟手**」——按下并移动超过阈值后 `cloneNode` 复制一份挂到页面顶层,半透明、关闭指针事件、启用 GPU 合成,按光标相对按下点的偏移贴住光标,**原书签始终留在槽位**;落点只在松手时一次性计算并提交,代码净减约 75 行,跟手更轻盈。
- **书签浮层拖拽从零实现**:书签「更多」浮层与子文件夹浮层里,每一项可**长按(180ms)或按住拖动(超过 4px)**拎起,在同级里重新排序或拖进文件夹;落点检测走 DOM 标记驱动(`data-bookmark-*` + `elementFromPoint` + `closest`),文件夹中心高亮为「放入」,带循环目录防护(沿父链查禁塞进自己的后代)与幽灵点击抑制(拖完吞掉紧随的 click)。
- **文件夹下拉菜单收编进统一浮层**:原先走原生 `Menu`、列表项不是 DOM 无法右键 / 拖拽,现改为与「更多」按钮共用同一个多列浮层,只多传一个 `align` 参数(`'start'` 向右展开 / `'end'` 向左展开);从此所有书签列表项都是 DOM,右键编辑 / 删除、长按拖拽在文件夹菜单里同样可用。
- **子菜单面板动态化 + 拖入即时生效**:子文件夹菜单高度随内容行数与窗口可用高度自适应、溢出可滚;拖书签进文件夹后被拖项立即从根面板与已展开子菜单中消失(本地对被拖项、原父级 `children`、目标 `children` 三处原子更新),再异步落库,所见即所得。
- **IPC 边界序列化加固**:新增统一的 `snapshotBookmarkForIpc` / `snapshotBookmarksForIpc`,在 IPC 边界显式只保留原始字段并对每个字段做 `typeof` 守卫,从源头杜绝 MobX observable proxy 在 structured clone 时抛「An object could not be cloned」。
### 4. 标签交互新设置:右键关闭 + 隐藏关闭按钮
新增两个外观设置(「设置 → 外观」,紧跟「双击关闭标签页」之后,**默认关闭**):
- **右键关闭标签页和标签组**(`closeTabOnRightClick`):开启后在任意标签 / 标签组芯片上右键即关闭;按住 Shift 右键仍可调出原生右键菜单作为逃生舱。
- **隐藏标签栏关闭按钮**(`hideTabCloseButtons`):关闭按钮默认隐藏,只在鼠标悬停到该标签上时淡入,隐藏时同时设 `pointer-events: none`,避免幽灵热区误触。
- 两个开关**跨五处 UI 一致生效**:顶部标签栏、左侧栏标签、标签组芯片、侧边栏分组表头,以及独立打包的侧边栏浮层面板(设置值随标签快照 payload 一并下发,不新增 IPC)。
### 5. 选中文本右键「搜索」
- 网页上选中文本后,右键菜单新增「搜索」项,使用用户当前设置的默认搜索引擎(`searchEngines[searchEngine]`,回退第一个,再回退 Google)把选中文本作为关键字打开搜索结果页;与既有的「问问雨见 AI / 加入知识库」等选中项并列,贴合 Chrome / Edge 习惯。
### 6. 下载按钮三态可见性 + 下载速度归一化
- **下载按钮三态可见性**:工具栏下载按钮从原来的「显示 / 隐藏」二态升级为 `always`(常显)/ `on-download`(仅下载中显示,默认)/ `hidden`(隐藏)三态(`DownloadVisibility`),并在「自定义工具栏」里给出独立控件;旧配置里放在 `hidden` 列的下载按钮会自动迁移到 `hidden` 态,不再重复保存。
- **下载速度归一化**:新增 `normalizeDownloadSpeed` 工具与 `MIN_DOWNLOAD_SPEED_BYTES_PER_SECOND` 常量,把非有限数、负数、过小的异常速度统一归 0;媒体下载器、会话服务、下载项组件、下载工具函数各调用点全量替换,消除「NaN / 负速率 / 抖动到极小值」导致的下载条 UI 异常。
### 7. winreg 原生消息主机解析(KeePassXC 等)
- 扩展框架内置的 winreg 解析器(`src/vendor/electron-chrome-extensions/browser/api/lib/winreg.ts`)重写,正确解析 Windows `reg query` 输出里的 native messaging host 清单(含中文系统下 `(默认)` / 乱码 GBK 表项、按指定字段名取值等情形),让浏览器能识别 KeePassXC 这类通过注册表登记的原生消息主机;配套新增 `scripts/test-winreg.js` 回归测试(用 TypeScript transpile 在线加载源码断言解析结果)。
- 同提交内扩展存储补丁与扩展更新器的会话扩展移除逻辑一并加固,并补上 `scripts/test-extension-storage-patch.js` 回归测试。
### 8. 稳定性与诊断
- **渲染进程崩溃页 + 复制诊断信息**:渲染进程崩溃(`render-process-gone`)的恢复页(`network-error.html`)区分「渲染崩溃」分支,隐藏「网络诊断」按钮、改显「**复制诊断信息**」按钮,一键把崩溃时刻的 reason / exitCode / URL / 时间等拷到剪贴板方便反馈;`view.ts` 增加 `rendererCrashPageLoading` 防止恢复页自身再次崩溃时被误判为加载完成、反复清错态。
- **`safe-send` 通道**:扩展消息总线新增 `sendToLiveFrame` / `sendToLiveMainFrame`(`safe-send.ts`),针对「frame 在导航 / 拆卸竞态中被销毁」这一**预期内**的失败场景做静默吞咽——优先走 `WebFrameMain._send` 同步原生入口,跳过 Electron 公开 `send()` 在吞错前的日志输出,只在真正异常时才 `console.error`,避免正常切换页面时控制台被「Render frame was disposed」刷屏。
- **日志保留上限提升**:主进程文件日志(`logger.ts`)的最大保留份数上调,崩溃与诊断信息留存更久,便于回溯 packaged 环境下的问题。
## 体验与细节打磨
- **PWA 独立窗口视频全屏修复**:PWA 独立窗口此前点视频全屏会被静默拒绝——根因是它与普通标签共享 `persist:view` 会话却不在 `ViewManager` 管辖内,权限处理器对这类「无主」webContents 一律 `callback(false)`。现新增 `isAppModeWebContents` + 创建时一次性写入的 `WeakSet` 身份登记,「无主」分支里**仅当请求的是 `fullscreen` 且身份确属 PWA** 才放行,其余权限对 PWA 仍一律拒绝(最小授权);WeakSet 不持强引用,窗口关闭自动回收。
- **系统设置区加载态修复**:「设置 → 系统 → 数据存储位置」区块在数据异步加载完成前会闪现指向 `undefined` 路径的「恢复默认」按钮并可能触发渲染崩溃;补上与同文件其它位置一致的 `data &&` 存在性守卫,数据就绪前不再渲染该按钮。
- **拖拽落点视觉反馈统一**:书签栏与书签浮层的拖拽均采用蓝色插入线 + 文件夹整行高亮描边,深浅背景下都加了白色描边保证可见度,并随主题明暗自适应。
评论
暂无评论。