Skip to content

fix(desktop): save page downloads through the macOS shell - #277

Open
smarty-kiki wants to merge 1 commit into
OpenBMB:mainfrom
smarty-kiki:fix/macos-webview-download
Open

smarty-kiki wants to merge 1 commit into
OpenBMB:mainfrom
smarty-kiki:fix/macos-webview-download

Conversation

@smarty-kiki

@smarty-kiki smarty-kiki commented Sep 21, 2026 •

Copy link
Copy Markdown

打包态 macOS 壳把界面跑在 WKWebView 里,而本机 WebKit 既不肯按 下载 (主框架会带着 download 意图导航到 blob: URL,整个界面被文件内容顶掉),也没暴露 WKDownload 的落点代理(拿不到保存位置,WKNavigationActionPolicyDownload 等于空转)。 前端因此「点生成文件不下载,界面变成文本」,聊天产物、知识库导出、群聊日志、对话日志、渠道附件下载全都中招。

  • 壳里注册 WKScriptMessageHandler:页面用 begin/chunk/end 把字节推给原生,原生弹 保存面板后写盘,再把 saved/cancelled/error 结果回传页面
  • WKWebView 改用 WKWebViewConfiguration 创建以挂上该桥接;缺能力时自动退回原路径
  • 文件名在原生侧清洗(去路径分隔符与控制字符、限长),并限制单文件大小与并发数
  • 新增 frontend-enterprise/src/lib/download.ts 统一封装:有桥接走原生保存,浏览器里 保持原 行为;对象 URL 延后回收,避免字节被提前释放
  • 五个下载入口改用该封装,并按真实结果提示(用户取消保存面板不再谎报成功)

打包态 macOS 壳把界面跑在 WKWebView 里,而本机 WebKit 既不肯按 <a download> 下载
(主框架会带着 download 意图导航到 blob: URL,整个界面被文件内容顶掉),也没暴露
WKDownload 的落点代理(拿不到保存位置,WKNavigationActionPolicyDownload 等于空转)。
前端因此「点生成文件不下载,界面变成文本」,聊天产物、知识库导出、群聊日志、对话
日志、渠道附件下载全都中招。

- 壳里注册 WKScriptMessageHandler:页面用 begin/chunk/end 把字节推给原生,原生弹
  保存面板后写盘,再把 saved/cancelled/error 结果回传页面
- WKWebView 改用 WKWebViewConfiguration 创建以挂上该桥接;缺能力时自动退回原路径
- 文件名在原生侧清洗(去路径分隔符与控制字符、限长),并限制单文件大小与并发数
- 新增 frontend-enterprise/src/lib/download.ts 统一封装:有桥接走原生保存,浏览器里
  保持原 <a download> 行为;对象 URL 延后回收,避免字节被提前释放
- 五个下载入口改用该封装,并按真实结果提示(用户取消保存面板不再谎报成功)

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant