自托管 HTTP/IP 访问时部分导出按钮无响应
Author: iamkuangzhangCreated Jul 24, 2026Updated Jul 24, 2026
问题描述
自托管部署时,如果通过普通 HTTP 或服务器 IP 访问页面,例如:
http://<server-ip>/wechat-exporter/浏览器环境通常不是 secure context,此时 window.showDirectoryPicker() 不可用。当前 HTML / TXT / Markdown / Word / PDF 等导出流程会优先申请目录写入权限,因此在这类部署方式下,点击部分导出按钮可能没有明显反应;而 JSON / Excel 因为走普通文件下载,所以仍然可以正常导出。
复现环境
- 自托管 Docker 部署
- 通过普通 HTTP + 服务器 IP 访问
- 浏览器:Chrome
- 单篇文章抓取成功后,尝试导出 HTML / Markdown / Word / PDF
预期行为
当浏览器不支持 showDirectoryPicker(),或当前页面不是 secure context 时,导出功能应自动降级为普通浏览器下载:
- HTML:由于包含
index.html和资源目录,可以打包为 zip 下载 - TXT / Markdown / Word / PDF:可以直接使用普通文件下载
- 支持
showDirectoryPicker()的 HTTPS / localhost 环境继续保留原有目录导出体验
实际行为
在 HTTP/IP 自托管场景下,部分导出按钮可能没有明显反馈,用户容易误以为导出功能失效。
建议修复方向
在导出前检测:
window.isSecureContext && typeof window.showDirectoryPicker === 'function'如果不可用,则降级到 file-saver 下载;HTML 导出可以用 jszip 打包后下载。
我已经在自托管环境中验证过这种 fallback 方案可行,随后会提交一个 PR。
Source: wechat-article/wechat-article-exporter