Electron的運行環境為Chromium + Node.js, 而Chromium采用的是多進程機制,
也就是說每個頁面都是一個獨立的進程(渲染進程),因此頁面之間是沒有直接關系的,
要想進行通信,需要借助主進程作為橋梁。
所以我們首先先來學習主進程和渲染進程怎么通信:
1. 渲染進程---->主進程
發送端:
ipcRenderer.send(channel, data)
接收端:
ipcMain.on(channel, listener)
2. 主進程---->渲染進程
發送端:
① 被動發送
在主進程通過ipcMain.on接收到渲染進程的消息時,可以通過listener函數的event參數得到發送者, 回復消息,
event.sender.send(channel, data)
② 主動發送
win(要發送給的渲染進程窗體對象變量).webContents.send(channel, data)
接收端:
ipcRenderer.on(channel, listener)
有了以上背景知識,頁面間通信就很簡單了,頁面1發送事件給主進程,主進程再發送事件給頁面2即可。
注:
在Electron 5.x以后的版本,渲染進程默認沒有啟用Node.js環境,
在創建窗體時需要指定啟用Node環境,否則require命令在渲染進程中將不支持,無法導入electron中的ipcRenderer。
let win = new BrowserWindow({ webPreferences: { nodeIntegration: true } })