轻量级飞书文档桌面客户端:只包飞书文档网页,所有链接强制在应用内打开,不会跳到系统浏览器,也不会唤起飞书主客户端。
方式一:dmg 安装(npm run build 自己打包,见下文)→ 打开 dmg,把「飞书文档」拖进「应用程序」。
应用使用 ad-hoc 签名(未经 Apple 公证)。别的电脑首次打开若提示"无法验证开发者":右键应用 → 打开;或终端执行
xattr -cr /Applications/飞书文档.app。
方式二:从源码运行
npm install
npm start首次打开会进入飞书登录页,登录一次后 session 持久保留,之后直接进文档首页。
| 行为 | 处理方式 |
|---|---|
点击文档 / window.open / target=_blank(飞书域名) |
应用内新标签页打开,不弹新窗口 |
| Cmd+点击 / 中键点击链接 | 后台新标签页 |
feishu:// 等唤起客户端的协议 |
直接拦截吞掉 |
| 非白名单域名(外部链接) | 拦截,不跳系统浏览器 |
| Electron 标识 | UA 伪装成 Chrome,避免飞书降级 |
- 拖动排序:按住标签左右拖动,蓝色竖线标出插入位置,松手生效;顺序会随退出保存。
- 点标签切换;中键 / 点 ✕ 关闭;
Cmd+T新建;Cmd+W关闭;右键标签有菜单(分屏、复制链接、刷新、关闭、关闭其他)。 - 退出后重开,标签页(和分屏状态)自动恢复。
| 操作 | 效果 |
|---|---|
Cmd+Option+\ 或 tab 栏右侧 ◫ 按钮(避开飞书「清除格式」的 Cmd+\) |
开 / 关分屏(与下一个标签页分屏;只有一个标签时自动新开一个) |
| 右键某个标签 → 与当前标签页分屏查看 | 指定和哪个标签分屏 |
| 右键页面里的链接 → 在分屏窗格中打开 | 新文档直接出现在另一个窗格 |
| 拖中间的分隔条 | 调整左右比例(20%–80%) |
| 点击某个窗格 | 该窗格成为"聚焦窗格"(标签栏高亮) |
| 分屏中点标签栏里其他标签 | 替换"聚焦窗格"显示的内容 |
| 分屏中在某窗格里点开新文档 | 在该窗格内替换显示,分屏不退出 |
| 关闭分屏中的某个标签 | 自动退出分屏,保留另一个 |
都在 main.js 顶部:
START_URL:启动页,默认https://feishu.cn/docs/。也可用环境变量覆盖:FSDOC_URL=https://xxx.feishu.cn/docx/xxxx npm start
ALLOWED_HOSTS:应用内放行的域名白名单,已含飞书全系(feishu.cn/larkoffice.com/larksuite.com)和微信扫码登录域。需要放开其他站点(如帮助中心外链)就往里加。
- ✅ 启动加载
feishu.cn/docs→ 正确重定向登录页,登录域名白名单放行 - ✅ Electron 33.4.11 (darwin-arm64)
- ✅ 多标签:点文档 / Cmd+点击新开标签,退出重开自动恢复
- ✅ 标签拖动排序(模拟拖放事件):顺序变化并持久化
- ✅ 分屏:两窗格各 677px 宽、其余标签隐藏;拖分隔条到 30% 后宽度 949 / 405;退出分屏恢复整屏
- ✅ 真机验证:分屏拖动比例、点击窗格切换聚焦标签
- ✅ 稳定性实测(隔离数据目录):302 重定向 / iframe 自定义协议被拦、渲染进程崩溃自动恢复、单实例锁、菜单刷新作用于文档、页内导航后存盘、分屏关窗格后焦点交接、附件下载不留空白标签
- 🟡 未做真机验证:原生右键菜单
应用内置 GitHub Releases 自动更新(自研,见 updater.js;不用 electron-updater——它的 macOS 通道要求稳定开发者签名,ad-hoc 签名走不通):
- 启动 8 秒后静默检查,之后每 6 小时复查;应用菜单「检查更新…」手动触发。
- 有新版本弹原生对话框:立即更新(下载 zip → 原地替换 .app → 自动重启,带进度条小窗)/ 稍后再说 / 跳过此版本(持久记住)/ 查看发布页。
- 前置条件:仓库需为 public(已安装用户要能匿名访问 Releases API 和下载资产)。
- 运行位置只读(如直接从 dmg 里跑)或源码
npm start模式会降级为引导去发布页手动下载。
# 1. 改 package.json 的 version,然后打包(产物:dmg + 更新用 zip)
npm run build
# 2. 提交并推送到 main(推送按你的习惯手动执行)
# 3. 建 Release:tag 用 vX.Y.Z,上传两个资产(资产名必须 ASCII——GitHub 会清掉中文字符)
gh release create v0.5.1 dist/FeishuDocs-0.5.1-arm64.dmg dist/FeishuDocs-0.5.1-arm64.zip \
--title "v0.5.1" --notes "更新说明写这里"已安装旧版本的用户会在启动(或最多 6 小时内)收到升级提醒;Release 里必须带 FeishuDocs-<版本>-<架构>.zip 资产,否则自动更新降级为打开发布页。
npm install
npm run build # 产物在 dist/:飞书文档.app、FeishuDocs-<版本>-<架构>.dmg 和 .zipscripts/build-app.sh 不依赖 electron-builder:复用 node_modules 里的 Electron.app,放入应用代码、改名、换图标、ad-hoc 签名并生成 dmg。架构跟随本机 npm install 的 Electron(Apple 芯片 → arm64,Intel → x86_64)。
图标由 scripts/make-icon.swift 合成(npm run icon):白底圆角卡片 + 飞书官方品牌标识(build/feishu-mark.png,来源 Wikimedia 的 Lark Suite 2022 logo,与飞书同款)+「飞书文档」+「轻量版」徽章,产物 build/icon.icns 已提交。飞书名称与标识版权归字节跳动所有,本项目仅为个人使用的非商业客户端。
- 登录态、标签状态:
~/Library/Application Support/飞书文档/(删除即可退出登录 / 重置标签)。