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.
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
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 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.
-
Sayfaya maruz kalan apı'den başlayın
tab_browser_view/preload.js * API üyesiconst clipboardApi = { write: invokerInMain("notion:clipboard:write") }; // Included in the API exposed through contextBridge: // window.__electronApi.clipboardBu üye kanal adını sağlar. ınvokerInMain uygulaması, isteğin sayfanın sürecinden nasıl ayrıldığını
invokerInMainanlatır. -
Ö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:writearayabiliriz. -
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.
addListeneryöntemi bir ıpcMain kaydederipcMain.handle. -
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ı
text: "Project notes"
html: "<p>Project notes</p>"
+ "<!-- notionvc: <copy-id> -->"
id: <copy-id>
mimeTypes:
text/_notion-blocks-v3-production
→ structured block data
- HTML Kimliğini oku
- Aynı yerel kimliği bulun
- Notion blok verilerini geri yükle
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
| A | B |
| - | - |
| 1 | 2 |
table · headerRow: true
table_row
cells: ["A"], ["B"]
table_row
cells: ["1"], ["2"]
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.
- JavaScript uygulama kılavuzu Küçük bir Electron uygulamasının dışa aktarma özelliğini izleyin.
- DX-Ball yeniden yapılandırması İşaretli bir C işlevine ilişkin yerel talimatları izleyin.