雨见浏览器PC测试版1.5.7

发布于

本阶段(1.5.6 → 1.5.7)的主线是「**飞书文档完整转 Markdown + 扩展 Service Worker 稳定性**」。其一是为飞书 docx / wiki 这类**虚拟滚动渲染**的页面做了一套专门的 Markdown 提取器——自动从头滚到尾按块收集,标题、代码块、图片、列表、任务、引用 / 高亮块、表格、分隔线全部转成标准 Markdown,右键「复制为 Markdown」与知识库笔记收藏共用这条链路。其二是集中治理扩展 Service Worker 的顽疾:Electron 原生 `chrome.webRequest` 事件在 Service Worker 里是 undefined 导致油猴类扩展冷启动即崩,现在补上 IPC 支持的事件实现;i18n shim 在无 `XMLHttpRequest` 的 Worker 环境改走异步 fetch 语言目录,修复 Tampermonkey 弹窗一直显示英文的问题;再加一套 **bridge 卡死检测与恢复**——判定 Worker 永远无法完成握手时先关掉扩展自己的窗口强制换新渲染进程再重载,不再傻等。此外,**下载询问弹窗**全面增强(文件类型图标、大小、复制链接、改名搬运修复),**最近关闭标签**补齐了两个顺手入口:地址栏历史 / 书签弹窗新增「最近关闭」区(可恢复单个 / 全部),关闭标签后工具箱按钮 3 秒变「恢复」键,点一下就找回刚关的页面。

## 主要更新

### 1. 飞书文档完整提取为 Markdown

飞书 docx / wiki 是虚拟滚动渲染——DOM 里只保留可视区域附近的块,一次性提取拿不到完整正文。本阶段注入一个页面内收集器,把整篇文档滚一遍、逐块转成 Markdown:

- **虚拟滚动收集器**(`109b29d`,`common-actions.ts` +402):注入后定位文档滚动容器,**从头到尾自动滚动**(步长按视口高度、稳定判停、45 秒超时保护),按块收集并转换;完成后回到原滚动位置再补一次,防止顶部块漏采。识别飞书 / Lark 域名(`feishu.cn` / `larksuite.com` / `larkoffice.com`),有选区时仍走通用选区转换。
- **块类型全覆盖**:标题(heading 1-9 → `#`)、代码块(按行提取、内容含 ``` 时自动升级围栏)、图片(alt + src)、无序 / 有序列表(按缩进层级嵌套、跨块连续编号)、任务列表(勾选态 → `- [x]` / `- [ ]`)、引用 / 高亮块(callout / quote 整体作引用输出,子块去重)、表格(对齐的 Markdown 管道表格,`|` 转义)、分隔线;sheet / bitable / 画板等嵌入内容输出占位标记。标题优先取正文 h1,否则用页面标题去掉「飞书云文档」等后缀。
- **两遍扫描 + 顺序纠正**(`4287b92`):虚拟滚动下代码行等内容可能延后挂载,首遍可能采到空 / 残缺内容——同一块多次收集时**保留更完整的内容**;必要时整体扫第二遍补齐,最后按 `data-block-id`(文档顺序的连续数字)排序纠正跨遍乱序。

### 2. 扩展 Service Worker 稳定性:webRequest 补全 + i18n 修复 + 卡死恢复

围绕「扩展 Service Worker 起不来 / 起来不对」的一组修复,重点照顾油猴类(Violentmonkey / Tampermonkey)扩展:

- **chrome.webRequest 事件补全**(`2a7b833`):Electron 原生绑定了 `chrome.webRequest`,但每个 `on*` 事件都是 undefined——冷启动的 Service Worker(如浏览器重启后的 Violentmonkey)在顶层调用 `webRequest.onBeforeRequest.addListener` 时直接崩掉,弹窗再也打不开。现在在渲染侧注入 **IPC 支持的 webRequest 事件实现**(`onBeforeRequest` / `onHeadersReceived` / `onCompleted` 等全部 10 个事件),filter 与 extraInfoSpec 原样转发,与后续主补丁共用事件注册表,已缓存的引用继续有效。
- **i18n shim 支持 Service Worker**(`23d6364`):Service Worker 里没有 `XMLHttpRequest`,原 i18n shim 同步读 `_locales/*/messages.json` 的路径在 Worker 里静默失败,**Tampermonkey 的弹窗一直显示英文**。现改为无 XHR 时用异步 `fetch` 按候选语言优先级合并语言目录,落地前先回退原生 `getMessage`(default_locale),不再挡住扩展自身逻辑。
- **bridge 卡死检测与恢复**(`2d3717b`,`sessions-service.ts` +50 / `messaging.ts` +63):Worker 与扩展上下文之间的 bridge 超过 preload 自身就绪窗口仍未握手即判定「卡死」——这种情况等待永远不会自愈,恢复逻辑直接按**已证实故障**处理:绕过重试次数 / 冷却限制、绕过「弹窗打开时不重载」的保护(此时弹窗只是个空壳,其渲染进程还会钉住坏掉的扩展进程),并**先关闭扩展自己的 BrowserWindow**(弹窗、offscreen document)强制换新渲染进程,再重载扩展——否则重载后的 Worker 仍落在没有 preload 的旧进程里、依旧无法握手。弹窗场景同样在弹窗创建前先完成卡死恢复。

### 3. 下载询问弹窗增强

「下载前询问」浮窗整体翻新,并修了一个改名 / 换目录后文件落错位置的底层问题:

- **信息与操作升级**(`c8824f3`,+373 / −178):头部新增**文件类型图标徽章**与**文件大小**(服务器未返回 Content-Length 时不显示);右上角一键**复制下载链接**(复制后打勾反馈);主按钮改为明确的「下载」,目录旁「更改」按钮直达目录选择。
- **改名体验对齐 Chrome**:聚焦文件名输入框时**只选中扩展名之前的部分**,直接输入即可改名而不用手动避开后缀。
- **保存路径搬运修复**(`sessions-service.ts`):Electron 只在 `will-download` 回调内采纳 `savePath`,回调返回后再赋值只改了 getter,Chromium 仍按占位路径落盘——此前在询问浮层里改名 / 换目录,文件实际写到了占位位置。现在完成时把文件**从占位路径搬到用户所选位置**(跨盘符自动退回复制 + 删除),且搬运先于「打开文件 / 安装 crx」等收尾逻辑;占位路径保留预留到搬运完成,防止并发下载同名抢占。已提前完成的任务改名路径同样走搬运逻辑。
- **视觉统一**(`6320e0b`):弹窗圆角 / 描边 / 毛玻璃 / 阴影与扩展列表浮层(extensions-list)保持一致,暗色下层次更清晰。

### 4. 最近关闭标签:弹窗专区 + 工具箱一键恢复

「最近关闭的标签」在已有右键菜单基础上,补了两个更顺手的入口:

- **历史 / 书签弹窗新增「最近关闭」区**(`3880d2a`,`history-bookmarks-popup` +356):地址栏历史悬停弹窗顶部新增「最近关闭」分区(随打开从主窗口 TabsStore 下发快照,最多 10 条),支持**恢复单个**、**全部恢复**(倒序打开,最近关闭的最终处于激活态);默认折叠只显示 3 条、可展开全部(记忆展开状态),搜索时自动展开全部匹配项;条目右键菜单提供恢复 / 在当前页打开 / 复制链接。恢复指令经主进程回传主渲染进程 TabsStore 执行,恢复后弹窗内同步移除。
- **工具箱按钮 3 秒「恢复」态**:关闭标签后,工具栏工具箱按钮短暂变成**恢复箭头**(呼吸高亮),点击直接恢复刚关闭的标签——误关后不用翻菜单,顺手一点就找回;期间悬停暂停倒计时、悬停不弹工具箱菜单避免与恢复冲突,右键仍弹原工具箱菜单,3 秒无操作自动还原为工具箱。

评论

暂无评论。

0.039632s