[Electron] IPC 機制

Kobe Ko
3 min readNov 6, 2016

source code @ github

這次來說明一下 Electron 的 IPC 機制

Electron 使用 Chromium multi-process 的機制,由 main process 來創建 application,renderer process 來負責繪製 web page,而 process 之間是無法直接溝通的

那如果想要 web page 和 GUI 有互動,例如可以透過 button 來關閉整個視窗,那該怎麼做?這時候就必須透過 IPC (inter-process communication) 來做溝通。

Electron 的 IPC 溝通的概念,是透過 channel來傳遞訊息。channel 的一方監聽,另一方送訊息進來,示意圖如下

官方的文件在這邊,ipcMain 以及 ipcRenderer

相關 source code 放在 ipc 資料夾下,這個程式會示範如何透過 IPC,讓使用者可以透過在 web page 的 button,來關閉整個應用程式

  • 先說明一下這次的資料結構
ipc
|- app
| |- index.html
| |- index.js
|
|- main.js
|- package.json
  • index.html

這邊建立一個按鈕,並用 renderer process 來跑 index.js

  • index.js

首先,在 renderer process 拿到 ipcRenderer 的 instance,之後就可以透過這個 instance 來和 main process 做溝通。這邊要注意一點是,在 renderer process 就只能拿 ipcRenderer,如果改寫成

let ipcRenderer = require('electron').ipcMain

會發現 ipcRenderer 會是 undefined,這是因為 electron 會區別是 main process 還是 renderer process 的關係

接著讓按鈕監聽 click 事件。當按鈕被點擊後,透過 ipcRenderer 送訊息到 close-main-window 這個 channel,來和 main process 溝通

  • mina.js

在 require electron 的時候,順便拿 ipcMain 這個 instance。然後在最後面,叫 ipcMain 監聽 close-main-window 這個 channel,當從這個 channel 收到訊息的時候,就把視窗關掉

  • 執行程式
> npm install
> ./node_modules/.bin/electron .

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Kobe Ko
Kobe Ko

Written by Kobe Ko

Founder & CEO of topreco. Android & iOS Developer.

No responses yet

Write a response