自托管 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 自托管场景下,部分导出按钮可能没有明显反馈,用户容易误以为导出功能失效。

建议修复方向

在导出前检测:

typescript
window.isSecureContext && typeof window.showDirectoryPicker === 'function'

如果不可用,则降级到 file-saver 下载;HTML 导出可以用 jszip 打包后下载。

我已经在自托管环境中验证过这种 fallback 方案可行,随后会提交一个 PR。

Source: wechat-article/wechat-article-exporter