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 [email protected] analyze-javascript-application "/absolute/path/app.asar" --json > app-analysis.json03. 跨過渲染程序到主程序的邊界
讓 AI 代理檢視分析結果中 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 核對。實際結果取決於分析的檔案與使用的分析後端。 檢視上游來源與範圍 →