Electron - Basics
Process
Electron 的進程機制主要由兩個部分組成:主進程(Main Process) 和 渲染進程(Renderer Process)。
主進程 (Main Process)
- 每個 Electron 應用僅有一個主進程。
- 主進程負責創建應用的主窗口,並管理應用的生命周期。
- 主進程的權限非常高,它可以調用 Node.js 提供的所有 API,也可以與操作系統進行交互(例如:檔案系統操作、創建子進程、打開原生對話框) 。
- 主進程負責創建和管理應用中的所有窗口(BrowserWindow) ,並能夠與渲染進程進行通信。
渲染進程 (Renderer Process)
- 每個應用窗口都是一個獨立的渲染進程,負責渲染網頁內容(HTML、CSS、JavaScript) 。
- 渲染進程本質上是運行在 Chromium 引擎中的網頁環境,它擁有與一般瀏覽器類似的行為和限制。
- 渲染進程的權限較低,為了安全起見,它無法直接訪問 Node.js 的全部 API,但可以通過 Electron 的 contextBridge 和 ipcRenderer 與主進程通信。
- 渲染進程可以使用 Electron 提供的 preload 腳本,將一些 Node.js 模組或功能暴露給網頁。
進程間通信 (Inter-Process Communication, IPC)
- 主進程和渲染進程之間使用 IPC 進行數據傳遞。
- 渲染進程使用 ipcRenderer 發送消息給主進程,而主進程使用 ipcMain 接收和回應這些消息。反之,主進程也可以向渲染進程發送消息。
- Electron 提供的 contextBridge 和 preload 腳本讓渲染進程能安全地與主進程進行通信,避免直接暴露過多的 Node.js API,從而提高應用的安全性。
Module
app
- 主進程模組,用來控制整個應用的生命周期。它包含了一系列的事件和方法,用於管理應用的初始化、運行、退出等流程。
BrowserWindow
- 主進程模組,用來創建和管理應用窗口的模組。
- 每個 BrowserWindow 實例代表一個獨立的瀏覽器窗口,並且運行在自己的渲染進程中。
ipcMain
- 主進程模組,用來處理進程間通信的模組。
ipcRenderer
- 渲染進程模組,用來處理進程間通信的模組,
- 不要直接在網頁中使用 ipcRenderer,而是通過 preload 腳本中的 contextBridge 暴露安全的 API 給渲染進程。