กรณีศึกษา · Electron

ยังไง Notion สำเนา
ข้อความและเอชทีเอ็ม

ติดตามการเรียกฟังก์ชันจากคลิปบอร์ด Notionการเขียนข้อความโฆษณา,การเขียนในนามคนอื่น,บทความ,การเขียนเนื้อหา Electronนักเขียนคลิปบอร์ด

Notionพื้นที่ทำงาน 7.6.1·JavaScript·REA

สะพานภายใน Notionแพ็คเกจเดสก์ท็อป

  1. 01·หน้าหันหน้าไปทางเอพีไอ clipboard.write(data) พรีโหลดเปิดเผยวิธีการที่เรียกว่า
  2. 02*โหลดกระดาษห่อ ipcRenderer.invoke กระดาษห่อส่งช่องและอาร์กิวเมนต์
  3. 03·ตัวจัดการกระบวนการหลัก ipcMain.handle ผู้รับตรวจสอบว่าหน้าใดส่งไป
  4. 04·คลิปบอร์ดระบบ clipboard.write(data) Electron การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น

ช่องทางหนึ่งร่วมทั้งสองฝ่าย: notion:clipboard:write

รหัสที่บรรจุใช้ช่องเดียวกันในการโหลดและกระบวนการหลัก การแก้ไขห่อเผยให้เห็น Electron เรียกฟังก์ชันตามชื่อพวกนั้น

การดำเนินการคัดลอกไปที่ไหน?

หน้าจะเห็นวิธีการที่เรียกว่า clipboard.write. การดำเนินงานในการโหลดเป็นเสื้อคลุมห่อ คำถามที่มีประโยชน์คือสิ่งที่กระดาษห่อส่งและรหัสที่ได้รับมัน

ตัวแทนการเข้ารหัสของคุณ

ใช้ REA เพื่อติดตามวิธีการ Notion อร์ดระบบ แสดงรหัสในแต่ละขั้นตอน

ตัวอย่างพร้อมท์ด้วย Notionแพคเกจโปรแกรมท้องถิ่นที่มีให้ตัวแทนการเข้ารหัสของคุณ

REA ค้นหาตำแหน่งที่จะเริ่มต้นการอ่าน

การวิเคราะห์โหลดพรีโหลดแท็บด้วย REA การเรียกที่ส่งคำขอไอพีซี การค้นพบทั้งสองมาพร้อมกับช่วงแหล่งที่มาในกลุ่มย่อ:

REA ผลการวิจัย→สองสถานที่ที่จะเปิด

หน้าเว็บ
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 ผลลัพธ์ Notionแท็บโหลดล่วงหน้าบันทึกด้วย REA 4.1.0. ตำแหน่งใช้บรรทัดของชุดเดิมและคอลัมน์ตามศูนย์

การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น,บทความ,การเขียนบทความใหม่,การเขียน invokerInMain. อุปกรณ์เว็บไซต์เรียกฟังก์ชัน notion:clipboard:write. ชื่อนั้นทำให้ตัวแทนบางสิ่งบางอย่างที่แม่นยำในการค้นหาในกลุ่มหลัก. สี่ข้อความที่ตัดตอนมาด้านล่างแสดงเส้นทางที่เชื่อมต่อ.

สี่ชิ้นสั้นของรหัส

ง่ายจากบรรจุ JavaScript มีชื่อตัวแปรที่อ่านได้ สมาชิกที่ไม่เกี่ยวข้องจะถูกละเว้น

  1. การเขียนข้อความโฆษณา,การเขียนในนามคนอื่น

    แท็บ_เบราเซอร์_มุมมอง/preload.js ·สมาชิกเอพีไอ
    const clipboardApi = {
      write: invokerInMain("notion:clipboard:write")
    };
    
    // Included in the API exposed through contextBridge:
    // window.__electronApi.clipboard

    สมาชิกนี้ระบุชื่อช่อง การดำเนินงานของ invokerInMain บอกเราว่าคำขอออกจากกระบวนการของหน้าเว็บอย่างไร

  2. แก้ไขกระดาษห่อของโหลด

    แท็บ_เบราเซอร์_มุมมอง/preload.js ·ผู้ช่วยไอพีซี
    function invokerInMain(channel) {
      return (...args) => invokeInMainAndReturnResult(channel, ...args);
    }
    
    function invokeInMainAndReturnResult(channel, ...args) {
      return ipcRenderer.invoke(channel, ...args);
    }

    ฟังก์ชั่นกลับส่งต่ออาร์กิวเมนต์ผ่าน Electronคำขอและการตอบสนองของไอพีซี ตอนนี้เราสามารถมองหา notion:clipboard:write ในด้านกระบวนการหลัก

  3. ตรวจสอบวิธีการลงทะเบียนผู้รับ

    หลัก/index.js *ผู้ช่วยผู้จัดการ
    const handleRequestFromRenderer = {
      addListener(channel, handler) {
        ipcMain.handle(channel, handler);
      }
    };

    กระบวนการหลักใช้กระดาษห่ออื่น มัน addListener วิธีการลงทะเบียน ipcMain.handle รับสัญญาณสำหรับช่องทางที่

  4. ค้นหาการเขียนและการตรวจสอบผู้ส่ง

    หลัก/index.js *รับคลิปบอร์ด
    handleRequestFromRenderer.addListener(
      "notion:clipboard:write",
      (event, data) =>
        isNotionWebContents(event.sender)
          ? clipboard.write(data)
          : undefined
    );

    นี่คือจุดหมายปลายทาง หลังจากตรวจสอบผู้ส่งแล้วตัวจัดการจะส่งข้อมูลที่ให้มา Electronคลิปบอร์ดเอพีไอ ช่องและตัวห่อที่แก้ไขแล้วสองตัวเชื่อมต่อวิธีการเปิดเผยกับสายนี้

บล็อกที่ถูกคัดลอกเก็บโครงสร้างไว้ได้อย่างไร

Notionแก้ไขข้อความ electronApi.clipboard.write. การป้องกันไวรัสในเชิงรุกและการรักษาความปลอดภัยที่จะไปมือถือด้วยความมั่นใจ

เชื่อมโยงไปยังบล็อกข้อมูลที่บันทึกไว้

ส่งไปยังคลิปบอร์ดระบบ
text: "Project notes"
html: "<p>Project notes</p>"
    + "<!-- notionvc: <copy-id> -->"
บันทึกไว้ในประเทศโดย Notion
id: <copy-id>
mimeTypes:
  text/_notion-blocks-v3-production
    → structured block data
  1. อ่านรหัสเอชทีเอ็มแอล
  2. ค้นหารหัสท้องถิ่นเดียวกัน
  3. คืนค่า Notion บล็อกข้อมูล
ข้อความและรหัสตัวอย่าง การทดสอบโมดูลที่บันทึกไว้คืนค่าข้อมูลบล็อกเมื่อตรงกับรหัส;รายการเก่าส่งกลับเฉพาะข้อค

เมื่อวาง, Notion ตรวจสอบกับสำเนาที่บันทึกไว้ รหัสที่ตรงกันจะคืนค่าข้อมูลที่ถูกบล็อก

รูปแบบคลิปบอร์ดที่บันทึกจากเนื้อหาเว็บแคชเมื่อวันที่ 13 กรกฎาคม 2026

ตัวอย่างและแหล่งที่มาเพิ่มเติม

อีกตัวอย่างหนึ่ง:ตารางยอด

Notion วิเคราะห์ยอดรวมลงในข้อมูลบล็อก ตัวอย่างนี้แสดงให้เห็นว่าตารางกลายเป็นแถวส่วนหัวและข้อมูล

ตารางผ่าน Notionวิเคราะห์ยอดรวมของ

อินพุตมาร์กดาวน์
| A | B |
| - | - |
| 1 | 2 |
การวิเคราะห์โครงสร้างผลลัพธ์*ข้อความที่ตัดตอนมา
table · headerRow: true
  table_row
    cells: ["A"], ["B"]
  table_row
    cells: ["1"], ["2"]
ผลลัพธ์ที่บันทึกจากตัวแยกยอดรวม ตารางจะกลายเป็นแถวและเซลล์
เส้นทางอื่น:การเชื่อมต่อแบบออฟไลน์

Notionคำขอแสดงผลของ getSqliteMeta ผ่านไอพีซี กระบวนการหลักสร้างแชแนลข้อความและให้พอร์ตหนึ่งไปยังตัวแสดงผลและอื่นๆไปยังกระบ ชุดคำสั่งที่ตามมาและผลการเดินทางผ่านพอร์ตที่

ต่อไปนี้แฮนด์ออฟนี้อธิบายที่ทำงานฐานข้อมูล,และทำไมการติดตามเพียงการร้องขอไอพีซีเ

แหล่งที่มาและวิธีการอ่านข้อความที่ตัดตอนมา

สะพานคลิปบอร์ดมาจาก Notion สก์ท็อป 7.6.1 ของ app.asar:โหลดแท็บล่วงหน้าและ main/index.js. ข้อความที่ตัดตอนมาขยายชื่อตัวแปรที่ย่อและละเว้นรหัสที่ไม่เกี่ยวข้อง;ผู้ช่วยตรวจสอบผู้ส่ง isNotionWebContents เรียกฟังก์ชันมา

ตัวอย่างคลิปบอร์ดเสมือนและรวมยอดมาจากเนื้อหาเว็บแคชเมื่อวันที่ 13 กรกฎาคม 2026 รวมถึงโมดูล 747001, 58169, 736810 และ 422457. สินทรัพย์เหล่านั้นมีเวอร์ชั่นของตัวเอง โพรบที่บันทึกไว้ดำเนินการแยกโมดูลและสายรัดขนาดเล็ก;ผลของพวกเขาอธิบายหัววัดเหล่

ร REA ผลลัพธ์ที่แสดงที่นี่คือการวิเคราะห์ที่มุ่งเน้นการโหลดพรีโหลดแท็บที่บันทึกไว้ที่มีการเผยแพร่ REA 4.1.0 แพคเกจ การบริหารจัดการโปรเจค,วิจัย,การวิจัยตลาด,การวิจัยอินเทอร์เน็ต สมาชิกคลิปบอร์ดและรับจับคู่มีการเชื่อมต่อโดยการอ่านการใช้งานห่อของพวกเขาในแพค

ตัวอย่างยอดรวมใช้โมดูลแยก 422457. การทดสอบโมดูลที่บันทึกไว้แสดงว่าทั้งหน้าและตัวกรองแชทจะเก็บตารางนี้ไว้ วาง/นำเข้า,การรวมโครงสร้างและการวิเคราะห์ไอ/แชทมีจุดเข้าที่แยกต่างหากและรูปแบบ

ด้านบน