Electron / Intermedio / 15 min de lectura

Notion: ¿cómo copia texto enriquecido una aplicación Electron?

Usa REA para seguir la ruta documentada del portapapeles de Notion, desde el renderizador, pasando por IPC, hasta el portapapeles del sistema. Aplica el método a tu propia aplicación Electron.

En esta página
Qué obtendrás

Un mapa respaldado por código de los datos de texto y HTML, el límite entre procesos y la función que escribe en el portapapeles.

Qué necesitas

REA, una aplicación Electron que puedas inspeccionar y su app.asar o JavaScript extraído. No se necesita motor nativo.

01. Empezar por los datos de copia, no por toda la aplicación

Copiar texto en negrita parece una sola operación. En Electron, el editor, el puente expuesto a una página web y el proceso autorizado para escribir en el sistema operativo pueden ser partes de código diferentes. Tu trabajo es conectarlas.

La investigación oficial de Notion siguió Desktop 7.6.1. La ruta documentada pasa texto y HTML por una API del portapapeles y un receptor IPC. El grafo por sí solo no resolvió toda la ruta: la lectura directa de las funciones envolventes aportó los enlaces que faltaban. Este tutorial aplica ese método de investigación; no es una nueva captura de Notion.

Pídeselo a tu agente de programación
Usa REA para inspeccionar /absolute/path/app.asar. Investiga únicamente la copia de texto enriquecido. Encuentra la llamada del renderizador, el puente preload, el canal IPC, el controlador receptor y la escritura final en el portapapeles. Para cada enlace, muestra su archivo y rango de código. Marca los enlaces dinámicos o faltantes como sin resolver. No ejecutes la aplicación.

02. Encontrar los puntos de entrada distribuidos

Trabaja sobre una copia de los archivos de la aplicación. En macOS, los paquetes Electron suelen colocar app.asar en Contents/Resources; en Windows y Linux suelen usar una carpeta resources. Confirma la ruta en vez de suponer que todas las aplicaciones usan la misma estructura.

Mantén cualquier directorio complementario app.asar.unpacked junto al archivo. Revisa los fallos de análisis sintáctico, los archivos omitidos y la entrada principal descubierta antes de confiar en el mapa. Un inventario incompleto puede ocultar el receptor que necesitas.

Terminal
npx -y [email protected] analyze-javascript-application "/absolute/path/app.asar" --json > app-analysis.json

03. Cruzar el límite del renderizador al proceso principal

Pide al agente que inspeccione el código real alrededor de las referencias a contextBridge, clipboard e ipcRenderer.invoke devueltas por el análisis. Un puente puede exponer una función genérica cuyo canal se pasa mediante una variable. Buscar el canal literal en el grafo puede no devolver nada aunque el código de la función envolvente lo contenga.

El informe original de Notion identificó el canal notion:clipboard:write leyendo el objeto API empaquetado y conectó después su receptor con clipboard.write de Electron. Registra los nombres equivalentes de tu propia versión; no pegues desplazamientos históricos en otra versión.

  • Renderizador: ¿qué evento construye los datos de copia?
  • Preload: ¿qué API pública los reenvía y cómo se proporciona el canal?
  • Proceso principal: ¿qué controlador los recibe y cómo se comprueba el remitente?
  • Destino: ¿qué campos de texto, HTML o personalizados llegan a la API del portapapeles?

04. Probar una característica de formato

En un documento desechable, copia una frase breve con una palabra en negrita. Pégala en un editor de texto enriquecido y en uno de texto plano. Registra ambas salidas. Repite con un enlace, un salto de línea y caracteres no ASCII. Estas comprobaciones distinguen la alternativa de texto plano de la conservación del formato.

Que la ruta del código coincida no demuestra que tu sistema operativo aceptara todos los formatos. La investigación original también utilizó módulos web almacenados por separado en caché; no registró una sesión de copia de escritorio de la misma versión. Mantén esa distinción en tu propio informe.

Pídeselo a tu agente de programación
Crea una pequeña función de datos de copia para mi propia aplicación usando el comportamiento que establecimos. Mantén separados el texto plano y el HTML. Añade pruebas de negrita, enlaces, saltos de línea y Unicode. Enumera los formatos personalizados del portapapeles que sigan sin explicación; no afirmes compatibilidad completa con Notion.

05. Cuando el seguimiento se detiene en una función envolvente

Inspecciona conjuntamente la definición de la función envolvente y su punto de llamada. Si un nombre de canal se construye en ejecución, registra la expresión en vez de inventar un valor literal. Si la escritura la realiza una extensión nativa, el análisis JavaScript termina en ese límite.

El resultado final debe ser una ruta breve con pruebas para cada paso, junto con las pruebas de formato que realmente ejecutaste. Eso basta para reconstruir una función de copia útil sin fingir que se ha recreado el editor.

Comandos comprobados con REA 6.4.0. Los resultados específicos dependen de tu artefacto y proveedor. Leer la fuente original y su alcance →

Seguir investigandoElegir tu próximo tutorial →

¿Acabas de conocer la herramienta? ¿Qué es REA? · Cómo revisamos nuestras guías