Electron 主程序與渲染程序之間的通 信(同步通訊、非同步通訊)
阿新 • • 發佈:2020-12-08
有時候我們想在渲染程序中通過一個事件去執行主程序裡面的方法。或者在渲染程序中通知
主程序處理事件,主程序處理完成後廣播一個事件讓渲染程序去處理一些事情。這個時候就
用到了主程序和渲染程序之間的相互通訊。
Electron 主程序,和渲染程序的通訊主要用到兩個模組:ipcMain 和 ipcRenderer
ipcMain:當在主程序中使用時,它處理從渲染器程序(網頁)傳送出來的非同步和同步資訊,
當然也有可能從主程序向渲染程序傳送訊息。
ipcRenderer: 使用它提供的一些方法從渲染程序 (web 頁面) 傳送同步或非同步的訊息到主
程序。 也可以接收主程序回覆的訊息。
場景 1:渲染程序給主程序傳送非同步訊息:
//渲染程序 const { ipcRenderer } = require('electron') i pcRenderer.send('msg',{name:'張三'}); //非同步
主程序:
//主程序 const { ipcMain } = require('electron'); ipcMain.on(''msg'',(event,arg) => { })場景 2:渲染程序給主程序傳送非同步訊息,主程序接收到非同步訊息以後通知渲染程序
//渲染程序 const { ipcRenderer } = require('electron') ipcRenderer.send('msg',{name:'張三'}); //非同步
//主程序 const { ipcMain } = require('electron'); ipcMain.on(''msg'',(event,arg) => { event.sender.send('reply', 'pong'); })
//渲染程序 const { ipcRenderer } = require('electron') ipcRenderer.on('reply', function(event, arg) { console.log(arg); // prints "pong" } );場景 3:渲染程序給主程序傳送同步訊息:
//渲染程序 const { ipcRenderer } = require('electron') const msg = ipcRenderer.sendSync('msg-a'); console.log(msg)
//主程序 ipcMain.on('msg-a',(event)=> { event.returnValue = 'hello'; })