原文:https://github.com/electron/electron/blob/master/docs/api/ipc-main.md
譯者:Lin
從主進程到渲染進程的異步通訊匕得。
線程:主線程
ipcMain
模塊是一個EventEmitter類的實例巾表。在主線程中使用時,它處理發(fā)送自渲染線程(網頁)的異步和同步消息调塌。發(fā)送自渲染器的消息將會使用這個模塊中被分發(fā)惠猿。
<h2 id="sending-messages">發(fā)送消息</h2>
它也可以從主進程發(fā)送消息到渲染進程,更多信息請查看webContents.send偶妖。
- 當發(fā)送一個消息,事件的名字是
channel
态秧。 - 回復一個同步消息扼鞋,你需要設置
event.returnValue
申鱼。 - 返回一個異步消息給發(fā)送者云头,你可能使用
event.sender.send(...)
。
一個在渲染進程和主進程之間發(fā)送和處理消息的例子:
// 在主進程中匣砖。
const {ipcMain} = require('electron')
ipcMain.on('asynchronous-message', (event, arg) => {
console.log(arg) // 打印結果是"ping"
event.sender.send('asynchronous-reply', 'pong')
})
ipcMain.on('synchronous-message', (event, arg) => {
console.log(arg) // 打印結果是"ping"
event.returnValue = 'pong'
})
// 在渲染進程中(網頁)。
const {ipcRenderer} = require('electron')
console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // 打印結果為"pong"
ipcRenderer.on('asynchronous-reply', (event, arg) => {
console.log(arg) // 打印結果為"pong"
})
ipcRenderer.send('asynchronous-message', 'ping')
<h2 id="methods">Methods</h2>
ipcMain
模塊又下面的監(jiān)聽事件的方法:
<h3 id="ipcMain-on"><code>ipcMain.on(channel, listener)</code></h3>
-
channel
String類型 -
listener
Function類型
監(jiān)聽channel
对人,當一個新的消息送達監(jiān)聽者將會調用listener(event, args...)
拂共。
<h3 id="ipcMain-once"><code>ipcMain.once(channel, listener)</code></h3>
-
channel
String類型 -
listener
Function類型
給事件添加一個一次性listener
函數(shù)。這個監(jiān)聽者只會在下一次一個消息被發(fā)送到channel
時被調用匣缘,調用之后就會被移除。
<h3 id="ipcMain-removeListener"><code>ipcMain.removeListener(channel, listener)</code></h3>
-
channel
String類型 -
listener
Function類型
通過channel
在監(jiān)聽者數(shù)組中移除指定的listener
培慌。
<h3 id="ipcMain-removeAllListeners"><code>ipcMain.removeAllListeners([channel])</code></h3>
-
channel
String類型(可選參數(shù))
移除所有監(jiān)聽者柑爸,或者指定的channel
中的所有監(jiān)聽者。
<h2 id="event-object">Event對象</h2>
通過callback
返回的event
對象有下面的方法:
<h3 id="event-returnValue"><code>event.returnValue</code></h3>
設置在一個同步消息中的返回值馅而。
<h3 id="event-sender"><code>event.sender</code></h3>
返回發(fā)送的消息的webContents
譬圣,你可以調用event.sender.send
來回復異步消息,查看webContents.send來獲取更多消息厘熟。