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.json03. Пересеките границу 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? · Как мы проверяем руководства