Electron / Средний уровень / Чтение: 15 мин

Notion: как приложение Electron копирует форматированный текст?

Проследите с REA описанный в отчёте путь Notion к буферу обмена: от renderer через IPC до системного буфера. Примените метод к своему приложению Electron.

На этой странице
Что вы получите

Подтверждённую кодом схему передачи текста и HTML, границы процессов и записи в буфер обмена.

Что понадобится

REA, доступное вам для анализа приложение Electron и его app.asar или распакованный JavaScript. Движок нативного анализа не требуется.

01. Начните с передаваемых данных, а не всего приложения

Копирование полужирного текста воспринимается как одна операция. В Electron редактор, мост для веб-страницы и процесс с правом записи в операционную систему могут быть разными частями кода. Ваша задача — связать их.

Официальное исследование Notion изучало Desktop 7.6.1. Описанный путь передаёт текст и HTML через API буфера обмена и получателя IPC. Одного графа оказалось недостаточно для всего пути: прямое чтение кода обёртки восполнило связи. Это руководство применяет метод того исследования; оно не представляет новую запись работы Notion.

Спросите программирующего агента
Используй REA для анализа /absolute/path/app.asar. Исследуй только копирование форматированного текста. Найди вызов renderer, мост 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.json

03. Пересеките границу renderer и главного процесса

Попросите агента изучить фактический код вокруг ссылок на contextBridge, clipboard и ipcRenderer.invoke, возвращённых анализом. Мост может предоставлять универсальную функцию, канал которой передаётся переменной. Поиск буквального канала в графе может ничего не дать, даже если он есть в коде обёртки.

Исходный отчёт Notion определил канал notion:clipboard:write чтением упакованного объекта API, затем связал его получателя с Electron clipboard.write. Запишите соответствующие имена из своей версии; не переносите исторические смещения в другой выпуск.

  • Renderer: какое событие формирует данные копирования?
  • Preload: какой публичный API передаёт их дальше и как задаётся канал?
  • Главный процесс: какой обработчик принимает данные и как проверяется отправитель?
  • Приёмник: какие поля текста, HTML или собственного формата доходят до API буфера обмена?

04. Проверьте одну особенность форматирования

Во временном документе скопируйте короткое предложение с одним полужирным словом. Вставьте его в редактор форматированного текста и обычный текстовый редактор. Запишите оба результата. Повторите со ссылкой, переносом строки и символами вне ASCII. Эти проверки отличают резервный обычный текст от сохранённого форматирования.

Совпадающий путь в коде не доказывает, что операционная система приняла все форматы. Исходное исследование также использовало отдельно кешированные веб-модули; оно не записывало копирование в настольном приложении той же версии. Сохраняйте это различие в своём отчёте.

Спросите программирующего агента
Создай небольшую функцию формирования данных копирования для моего приложения на основе установленного поведения. Держи обычный текст и HTML отдельно. Добавь тесты для полужирного текста, ссылок, переносов строк и Unicode. Перечисли необъяснённые собственные форматы буфера обмена; не заявляй о полной совместимости с Notion.

05. Когда прослеживание останавливается на обёртке

Изучайте определение обёртки вместе с местом её вызова. Если имя канала собирается при выполнении, запишите выражение вместо выдуманного литерала. Если запись делает нативное дополнение, анализ JavaScript заканчивается на этой границе.

Готовый результат — короткий путь с подтверждением каждого перехода и реально выполненные проверки форматирования. Этого достаточно, чтобы воссоздать полезную функцию копирования без заявления о воссоздании всего редактора.

Команды сверены с REA 6.4.0. Результаты для конкретной цели зависят от артефакта и провайдера. Исходный источник и границы исследования →

Продолжайте исследованиеВыберите следующее руководство →

Впервые используете инструмент? Что такое REA? · Как мы проверяем руководства