Örnek olay incelemesi * Electron

Notion nasıl kopyalanır
metin ve HTML.

Bir pano çağrısını izleyin Notion 's sayfa API'sı, ön yükleme ve ana işlem aracılığıyla Electron 's pano yazıcısı.

Notion Masaüstü 7.6.1 · JavaScript * REA

Notion'NUN masaüstü paketinin içindeki köprü

  1. 01 * Sayfaya bakan API clipboard.write(data) Ön yükleme, çağrılabilir bir yöntem ortaya çıkarır.
  2. 02 * Sarıcı ipcrenderer'ı önceden yükleyinipcRenderer.invokekanal ve argümanları sarmalayıcıyı çağır gönderir.
  3. 03 * Ana işlem işleyicisi ipcMain.handlealıcı, hangi sayfanın gönderdiğini kontrol eder.
  4. 04 * Sistem panosu clipboard.write(data)yazma (veri) Electron, sağlanan metni ve HTML'yi yazar.

Bir kanal iki tarafa katılır: notion:clipboard:write

Paketlenmiş kod, ön yükleme ve ana işlemde aynı kanalı kullanır. Sarmalayıcıların çözülmesi, bu adların arkasındaki Electron çağrılarını ortaya çıkarır.

Kopyalama işlemi nereye gidiyor?

Sayfa clipboard.write. Ön yükte uygulanması bir sarmalayıcıdır. Yararlı soru, bu sarıcının ne gönderdiği ve hangi kodu aldığıdır.

Kodlama aracınız

Notion'NUN metin ve HTML'yi sistem panosuna nasıl kopyaladığını izlemek için REA kullanın. Her adımda kodu gösterin.

Kodlama aracınız tarafından kullanılabilen Notion'NUN yerel uygulama paketine sahip örnek bir komut istemi.

REA okumaya nereden başlayacağınızı bulur

Sekme ön yüklemesini REA ile çözümlemek, sayfaya maruz kalan API'yi ve bir IPC isteği gönderen çağrıyı bulur. Her iki bulgu da küçültülmüş paketteki kaynak aralıklarıyla birlikte gelir:

REA bulguları → açılacak iki yer

Açık sayfa API'sı
api_key: "__electronApi"
api_status: "dynamic"
source: preload.js:1:22764–22828
Oluşturucu IPC çağrısı
operation: "invoke"
channel_expression: "e"
source: preload.js:1:6486–6522
REA 4.1.0 ile kaydedilen Notion'NUN sekme ön yüklemesindeki yeni bir analyze_javascript_application sonucundan seçilen alanlar. Pozisyonlar, orijinal paketin satırını ve sıfır tabanlı sütunu kullanır.

Aracı bu konumları açar, birleştirilmiş apı'de pano üyesini bulur ve ınvokerınmain'i okurinvokerInMain. Çağrı sitesi notion:clipboard:write sağlar. Bu isim, ajana ana pakette araması gereken kesin bir şey verir. Aşağıdaki dört alıntı, bağlandığı rotayı göstermektedir.

Dört kısa kod parçası

Okunabilir değişken adlarıyla paketlenmiş JavaScript'DAN basitleştirilmiştir. İlgisiz üyeler atlanır.

  1. Sayfaya maruz kalan apı'den başlayın

    tab_browser_view/preload.js * API üyesi
    const clipboardApi = {
      write: invokerInMain("notion:clipboard:write")
    };
    
    // Included in the API exposed through contextBridge:
    // window.__electronApi.clipboard

    Bu üye kanal adını sağlar. ınvokerInMain uygulaması, isteğin sayfanın sürecinden nasıl ayrıldığını invokerInMain anlatır.

  2. Önyüklemenin sarmalayıcısını çözme

    tab_browser_view/preload.js * IPC yardımcısı
    function invokerInMain(channel) {
      return (...args) => invokeInMainAndReturnResult(channel, ...args);
    }
    
    function invokeInMainAndReturnResult(channel, ...args) {
      return ipcRenderer.invoke(channel, ...args);
    }

    Döndürülen işlev, bağımsız değişkenleri Electron istek ve yanıt IPC'Sİ aracılığıyla iletir. Artık ana işlem tarafında notion:clipboard:write arayabiliriz.

  3. Alıcının nasıl kaydedildiğini kontrol edin

    main /index.js * işleyici yardımcısı
    const handleRequestFromRenderer = {
      addListener(channel, handler) {
        ipcMain.handle(channel, handler);
      }
    };

    Ana işlem başka bir sarmalayıcı kullanır. addListener yöntemi bir ıpcMain kaydederipcMain.handle.

  4. Yazıyı ve gönderen kontrolünü bulun

    ana /index.js * pano alıcısı
    handleRequestFromRenderer.addListener(
      "notion:clipboard:write",
      (event, data) =>
        isNotionWebContents(event.sender)
          ? clipboard.write(data)
          : undefined
    );

    Gidilecek yer burası. Göndereni kontrol ettikten sonra işleyici, sağlanan verileri Electron pano API'sı. Kanal ve çözümlenen iki sarmalayıcı, açıkta kalan yöntemi bu çağrıya bağlar.

Kopyalanan bir blok yapısını nasıl korur?

Notion'NUN web editörü, electronApı aracılığıyla metin ve HTML electronApi.clipboard.write. Blok verilerini yerel olarak saklar ve bunları bağlamak için kopyalanan HTML'ye bir kimlik koyar.

Kayıtlı blok verilerine HTML bağlantıları

Sistem panosuna gönderildi
text: "Project notes"
html: "<p>Project notes</p>"
    + "<!-- notionvc: <copy-id> -->"
Notion tarafından yerel olarak kaydedildi
id: <copy-id>
mimeTypes:
  text/_notion-blocks-v3-production
    → structured block data
  1. HTML Kimliğini oku
  2. Aynı yerel kimliği bulun
  3. Notion blok verilerini geri yükle
Açıklayıcı metin ve kimlik. Kaydedilen modül testi, kimlikler eşleştiğinde blok verilerini geri yükler; eski bir girdi yalnızca metin ve HTML döndürür.

Yapıştırmada, Notion HTML kimliğini arar ve kaydedilen kopyaya karşı kontrol eder. Eşleşen kimlikler blok verilerini geri yükler.

13 Temmuz 2026'da önbelleğe alınan web varlıklarından kaydedilen pano biçimi.

Daha fazla örnek ve kaynak

Başka bir örnek: İşaretleme tabloları

Notion, Markdown'u blok verilerine ayrıştırır. Bu örnek, bir tablonun üstbilgi ve veri satırlarına nasıl dönüştüğünü gösterir.

Notion'NUN Markdown ayrıştırıcısı aracılığıyla bir tablo

İşaretleme girişi
| A | B |
| - | - |
| 1 | 2 |
Yapılandırılmış ayrıştırıcı çıktısı * alıntı
table · headerRow: true
  table_row
    cells: ["A"], ["B"]
  table_row
    cells: ["1"], ["2"]
Çıkarılan bir Markdown ayrıştırıcısından kaydedilen çıktı. Tablo satırlar ve hücreler haline gelir.
Başka bir yol: çevrimdışı SQLite bağlantısı

Notion'NUN oluşturucu, getsqlitemeta'yı IPC aracılığıyla istergetSqliteMeta Ana işlem bir mesaj kanalı oluşturur ve bir bağlantı noktasını işleyiciye, diğeri ise bir SQLite yardımcı programı işlemine verir. Sonraki ifade grupları ve sonuçları bu bağlantı noktası üzerinden gider.

Bu aktarımın ardından, veritabanı çalışmasının nerede çalıştığı ve yalnızca ilk IPC isteğinin izlenmesinin neden sonraki konuşmayı kaçırdığı açıklanır.

Kaynaklar ve alıntıların nasıl okunacağı

Pano köprüsü, Notion Desktop 7.6.1'in app.asar: ön yükleme ve main/index.js. Alıntılar küçültülmüş değişken adlarını genişletir ve ilgisiz kodu atlar; Gönderen denetimi yardımcısı, altında yatan isNotionWebContents çağrısıyla gösterilir.

Sanal pano ve İşaretleme örnekleri, 747001, 747001, 58169 ve 422457 modülleri de dahil olmak üzere 13 Temmuz 2026'da önbelleğe alınan web varlıklarından 736810422457. Bu varlıkların kendi versiyonları var. Kaydedilen problar, çıkarılan modülleri ve küçük kablo demetlerini çalıştırdı; çıktıları, yakalanan bir masaüstü UI oturumundan ziyade bu probları tanımlar.

Burada gösterilen REA sonucu, yayınlanan REA 4.1.0 paketi ile kaydedilen kaydedilmiş sekme ön yüklemesinin odaklanmış bir analizidir. API'yi bulur ve işlemi başlatır. Pano üyesi ve eşleşen alıcı, paketteki sarmalayıcı uygulamalarını okuyarak bağlanır.

Markdown örneği 422457 ayrıştırıcı modülünü 422457. Kaydedilen modül testleri, hem sayfa hem de sohbet filtrelerinin bu tabloyu koruduğunu gösterir. Yapıştır / içe aktar, yapılandırılmış İşaretleme ve yapay zeka / sohbet ayrıştırıcıları ayrı giriş noktalarına ve ara biçimlere sahiptir.

Üst