Thao tác sao chép đi đâu?
Trang thấy một phương thức được gọi là clipboard.write. Việc triển khai nó trong tải trước là một trình bao bọc. Câu hỏi hữu ích là những gì trình bao bọc đó gửi và mã nào nhận được nó.
SỬ DỤNG REA để theo dõi CÁCH Notion sao chép văn bản và HTML vào bảng tạm hệ thống. Hiển thị mã ở mỗi bước.
Một lời nhắc ví dụ VỚI GÓI ứng dụng CỤC BỘ CỦA Notion có sẵn cho agent mã hóa của bạn.
REA tìm nơi bắt đầu đọc
Phân tích tab tải trước VỚI REA định vị API tiếp xúc với trang và cuộc gọi gửi yêu cầu IPC. Cả hai phát hiện đều đi kèm với phạm vi nguồn trong gói thu nhỏ:
REA phát hiện → hai nơi để mở
api_key: "__electronApi"
api_status: "dynamic"
source: preload.js:1:22764–22828
operation: "invoke"
channel_expression: "e"
source: preload.js:1:6486–6522
analyze_javascript_application kết quả TRÊN Notion 's tab tải trước, ghi LẠI VỚI REA 4.1.0. Các vị trí sử dụng dòng của gói ban đầu và cột không dựa trên.
Tác nhân mở các vị trí đó, tìm thành viên clipboard trong API được lắp ráp và đọc invokerInMain. Nguồn cung cấp trang web cuộc gọi của nó notion:clipboard:write. Tên đó cung cấp cho tác nhân một cái gì đó chính xác để tìm kiếm trong gói chính. Bốn đoạn trích dưới đây cho thấy tuyến đường mà nó kết nối.
Bốn đoạn mã ngắn
Đơn giản hóa TỪ JavaScript đóng gói , với tên biến có thể đọc được. Các thành viên không liên quan bị bỏ qua.
-
Bắt đầu TẠI API tiếp xúc với trang
tab_browser_view/preload.js * THÀNH VIÊN APIconst clipboardApi = { write: invokerInMain("notion:clipboard:write") }; // Included in the API exposed through contextBridge: // window.__electronApi.clipboardThành viên này cung cấp tên kênh. Việc thực hiện
invokerInMaincho chúng tôi biết cách yêu cầu rời khỏi quy trình của trang. -
Giải quyết trình bao bọc tải trước
tab_browser_view/preload.js * TRỢ GIÚP IPCfunction invokerInMain(channel) { return (...args) => invokeInMainAndReturnResult(channel, ...args); } function invokeInMainAndReturnResult(channel, ...args) { return ipcRenderer.invoke(channel, ...args); }Hàm trả về chuyển tiếp các đối số thông qua IPC YÊU cầu và phản hồi CỦA Electron. Bây giờ chúng ta có thể tìm kiếm
notion:clipboard:writevề phía chính-quá trình. -
Kiểm tra cách người nhận được đăng ký
chính/index.js * trình trợ giúp xử lýconst handleRequestFromRenderer = { addListener(channel, handler) { ipcMain.handle(channel, handler); } };Quá trình chính sử dụng một trình bao bọc khác. Của nó
addListenerphương pháp đăng ký mộtipcMain.handlengười nhận cho kênh đó. -
Tìm ghi và kiểm tra người gửi của nó
chính/index.js * bộ thu clipboardhandleRequestFromRenderer.addListener( "notion:clipboard:write", (event, data) => isNotionWebContents(event.sender) ? clipboard.write(data) : undefined );Đây là điểm đến. Sau khi kiểm tra người gửi, trình xử lý chuyển dữ liệu được cung cấp cho API clipboard CỦA Electron. Kênh và hai trình bao bọc được giải quyết kết nối phương thức tiếp xúc với cuộc gọi này.
Làm thế nào để một khối được sao chép giữ cấu trúc của nó?
Notion ' s web editor gửi văn bản VÀ HTML thông qua electronApi.clipboard.write. Nó giữ dữ liệu khối cục bộ và ĐẶT ID vào HTML đã sao chép để kết nối chúng.
LIÊN KẾT HTML để lưu dữ liệu khối
text: "Project notes"
html: "<p>Project notes</p>"
+ "<!-- notionvc: <copy-id> -->"
id: <copy-id>
mimeTypes:
text/_notion-blocks-v3-production
→ structured block data
- Đọc ID HTML
- Tìm CÙNG MỘT ID cục BỘ
- Khôi phục DỮ LIỆU KHỐI Notion
Khi dán, Notion tìm ID HTML và kiểm tra NÓ với bản sao đã lưu. Id phù hợp khôi phục dữ liệu khối.
Định dạng Clipboard được ghi lại từ tài sản web được lưu trong bộ nhớ cache vào ngày 13 tháng 7 năm 2026.
Thêm ví dụ và nguồn
Một ví dụ khác: Bảng Markdown
Notion phân Tích Markdown thành dữ liệu khối. Ví dụ này cho thấy cách một bảng trở thành tiêu đề và các hàng dữ liệu.
Một bảng thông QUA TRÌNH phân tích Cú pháp Markdown CỦA Notion
| A | B |
| - | - |
| 1 | 2 |
table · headerRow: true
table_row
cells: ["A"], ["B"]
table_row
cells: ["1"], ["2"]
Một đường dẫn khác: kết nối sqlite ngoại tuyến
YÊU CẦU trình kết xuất CỦA Notion getSqliteMeta THÔNG QUA IPC. Quá trình chính tạo kênh tin nhắn và cung cấp một cổng cho trình kết xuất và cổng kia cho quy trình tiện ích SQLite. Các lô tuyên bố tiếp theo và kết quả đi qua cổng đó.
Sau đó, handoff giải thích nơi công việc cơ sở dữ liệu chạy và tại sao chỉ truy tìm yêu cầu IPC ban đầu bỏ lỡ cuộc trò chuyện sau này.
Nguồn và cách đọc các đoạn trích
Cầu clipboard đến TỪ Notion Desktop 7.6.1 app.asar: tab tải trước và main/index.js. Các đoạn trích mở rộng tên biến được thu nhỏ và bỏ qua mã không liên quan; trình trợ giúp kiểm tra người gửi được hiển thị với phần bên dưới của nó isNotionWebContents gọi.
Các ví dụ về clipboard và Markdown ảo đến từ các tài sản web được lưu trong bộ nhớ cache vào ngày 13 tháng 7 năm 2026, bao gồm các mô-đun 747001, 58169, 736810 và 422457. Những tài sản đó có phiên bản riêng. Các đầu dò đã lưu thực thi các mô-đun được trích xuất và các dây nịt nhỏ; đầu ra của chúng mô tả các đầu dò đó thay vì một phiên GIAO diện người dùng máy tính để bàn bị bắt.
KẾT quả REA được hiển thị ở đây là phân tích tập trung của tab đã lưu tải trước, được ghi lại với gói REA 4.1.0 đã xuất bản. Nó định vị API và gọi hoạt động. Thành viên clipboard và bộ thu phù hợp được kết nối bằng cách đọc các triển khai trình bao bọc của chúng trong gói.
Ví Dụ Markdown sử dụng mô đun trình phân tích cú pháp 422457. Các bài kiểm tra mô-đun đã lưu cho thấy cả bộ lọc trang và trò chuyện đều giữ nguyên bảng này. Các trình phân tích cú pháp dán/nhập, Đánh dấu Có cấu trúc và ai/trò chuyện có các điểm nhập và định dạng trung gian riêng biệt.
- JavaScript hướng dẫn ứng DỤNGThực hiện theo tính năng xuất của ỨNG dụng Electron nhỏ.
- TÁI THIẾT DX-BallThực hiện theo hướng dẫn bản địa đến một chức năng C kiểm tra.