Electron / 进阶 / 阅读约 15 分钟
Notion:Electron 应用如何复制富文本?
用 REA 跟随已报告的 Notion 剪贴板路径,从渲染进程经过 IPC 到系统剪贴板,并将方法应用到自己的 Electron 应用。
本页内容
一份有源码依据的流程图,说明文本和 HTML 数据、进程边界,以及最终剪贴板写入方。
你需要REA、可供分析的 Electron 应用,以及它的 app.asar 或解压后的 JavaScript。无需原生分析引擎。
01. 从传递的数据开始,而非整个应用
复制加粗文字看似只有一步,但在 Electron 中,编辑器、暴露给网页的桥接层,以及有权限写入操作系统的进程,可能分别由不同代码实现。你的任务是把它们串起来。
官方 Notion 分析分析了 Desktop 7.6.1。报告中的路径通过剪贴板 API 和 IPC 接收方传递文本与 HTML。单靠关系图未能解析整条路径;直接阅读包装代码补上了缺失环节。本教程借用这一分析方法,并非对 Notion 的一次新捕获。
使用 REA 分析 /absolute/path/app.asar。仅分析复制富文本功能。找到渲染进程调用、preload 桥接层、IPC 通道、接收处理函数和最终剪贴板写入。为每个环节提供文件和源码范围,将动态或缺失环节标为未解决。不要运行应用。02. 找到发布包的入口
使用应用文件的副本操作。macOS 上的 Electron 软件包常把 app.asar 放在 Contents/Resources 下;Windows 和 Linux 通常使用 resources 文件夹。请确认路径,不要默认每个应用布局都相同。
如果有配套 app.asar.unpacked 目录,请保留在归档旁边。信任分析图前,查看解析失败、跳过的文件和发现的主入口。不完整的文件清单可能隐藏你要找的接收方。
npx -y rea-agents@6.4.0 analyze-javascript-application "/absolute/path/app.asar" --json > app-analysis.json03. 跨过渲染进程到主进程的边界
让智能体查看分析结果中 contextBridge、clipboard 和 ipcRenderer.invoke 引用周围的实际源码。桥接层可能暴露一个通用函数,通过变量传入通道。即使包装源码中存在通道名称,直接在图中搜索通道字面量也可能一无所获。
上游 Notion 报告通过阅读打包后的 API 对象识别了 notion:clipboard:write 通道,再将接收方关联到 Electron clipboard.write。记录你自己版本中对应的名称,不要把历史偏移量直接套用到其他版本。
- 渲染进程:哪个事件构造复制数据?
- Preload:哪个公开 API 转发数据,如何传入通道?
- 主进程:哪个处理函数接收数据,如何检查发送方?
- 最终写入:哪些文本、HTML 或自定义字段到达剪贴板 API?
04. 测试一种格式功能
在临时文档中复制一句短句,其中只含一个加粗词。分别粘贴到富文本编辑器和纯文本编辑器,记录两个输出。再用链接、换行和非 ASCII 字符重复测试。这些验证可区分纯文本回退与格式保留。
源码路径对应,不代表操作系统接受了所有格式。上游分析还使用了单独缓存的网页模块,没有记录同版本桌面端复制会话。你的报告也应保留这一区别。
根据已确认的行为,为我自己的应用编写小型复制数据构造函数,分开处理纯文本和 HTML。为加粗文字、链接、换行和 Unicode 添加测试。列出仍未解释的自定义剪贴板格式,不要声称完全兼容 Notion。05. 追踪停在包装函数时怎么办
同时查看包装函数定义与调用点。如果通道名称在运行时拼接,记录表达式,不要编造字面值。如果由原生扩展执行写入,JavaScript 分析就在该边界停止。
最终成果应是一条简短路径,每个环节都有证据,并附上实际执行的格式测试。这已经足以重建实用的复制功能,无需声称重建整个编辑器。
命令已对照 REA 6.4.0 核对。具体结果取决于分析对象和后端。 查看上游来源与范围 →