Skip to content

About

轻量飞书文档 Mac 客户端:只包文档,链接全部在应用内以标签页打开,支持分屏

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

飞书文档 Mac 客户端 (fsdoc-client)

轻量级飞书文档桌面客户端:只包飞书文档网页,所有链接强制在应用内打开,不会跳到系统浏览器,也不会唤起飞书主客户端。

安装

方式一: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 自定义协议被拦、渲染进程崩溃自动恢复、单实例锁、菜单刷新作用于文档、页内导航后存盘、分屏关窗格后焦点交接、附件下载不留空白标签
  • 🟡 未做真机验证:原生右键菜单

自动更新(v0.5.0+)

应用内置 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 资产,否则自动更新降级为打开发布页。

打包成 .app / .dmg

npm install
npm run build        # 产物在 dist/:飞书文档.app、FeishuDocs-<版本>-<架构>.dmg 和 .zip

scripts/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/飞书文档/(删除即可退出登录 / 重置标签)。

About

轻量飞书文档 Mac 客户端:只包文档,链接全部在应用内以标签页打开,支持分屏

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages