ipcMain
模塊是類EventEmitter的實例.當在主進程中使用它的時候,它控制着由渲染進程(web page)發送過來的異步或同步消息.從渲染進程發送過來的消息將觸發事件.
【發消息】
- 發送消息,事件名為
channel
.
- 回應同步消息, 你可以設置
event.returnValue
.
- 回應異步消息, 你可以使用
event.sender.send(...)
.
例子:
// 主進程中 const ipcMain = require('electron').ipcMain; ipcMain.on('asynchronous-message', function(event, arg) { console.log(arg); // prints "ping" event.sender.send('asynchronous-reply', 'pong'); }); ipcMain.on('synchronous-message', function(event, arg) { console.log(arg); // prints "ping" event.returnValue = 'pong'; });
// 渲染進程中(web page). const ipcRenderer = require('electron').ipcRenderer; console.log(ipcRenderer.sendSync('synchronous-message', 'ping')); // prints "pong" ipcRenderer.on('asynchronous-reply', function(event, arg) { console.log(arg); // prints "pong" }); ipcRenderer.send('asynchronous-message', 'ping');
從上面的代碼中,我們可以看出,同步消息使用sendSync方法,在發出的瞬間即可接收到響應內容。而異步消息使用send方法,之后需要監聽異步事件才能得到響應。
【監聽消息】
ipcMain.on(channel, listener)
channel
Stringlistener
Function
監聽 channel
, 當新消息到達,將通過 listener(event, args...)
調用 listener
.
ipcMain.once(channel, listener)
channel
Stringlistener
Function
為事件添加一個一次性用的listener
函數.這個 listener
只有在下次的消息到達 channel
時被請求調用,之后就被刪除了.
ipcMain.removeListener(channel, listener)
channel
Stringlistener
Function
為特定的 channel
從監聽隊列中刪除特定的 listener
監聽者.
ipcMain.removeAllListeners([channel])
channel
String (可選)
刪除所有監聽者,或特指的 channel
的所有監聽者.
【事件對象】
event.returnValue
將此設置為在一個同步消息中返回的值.
event.sender
返回發送消息的 webContents
,你可以調用 event.sender.send
來回復異步消息。
ipcRenderer
模塊是一個EventEmitter類的實例. 它提供了有限的方法,你可以從渲染進程向主進程發送同步或異步消息. 也可以收到主進程的相應.
【消息監聽】
ipcRenderer.on(channel, listener)
channel
Stringlistener
Function
監聽 channel
, 當有新消息到達,使用 listener(event, args...)
調用 listener
.
ipcRenderer.once(channel, listener)
channel
Stringlistener
Function
為這個事件添加一個一次性 listener
函數.這個 listener
將在下一次有新消息被發送到 channel
的時候被請求調用,之后就被刪除了.
ipcRenderer.removeListener(channel, listener)
channel
Stringlistener
Function
從指定的 channel
中的監聽者數組刪除指定的 listener
.
ipcRenderer.removeAllListeners([channel])
channel
String (optional)
刪除所有的監聽者,或者刪除指定 channel
中的全部.
【發送消息】
ipcRenderer.send(channel[, arg1][, arg2][, ...])
channel
Stringarg
(可選)
通過 channel
向主進程發送異步消息,也可以發送任意參數.參數會被JSON序列化,之后就不會包含函數或原型鏈.
主進程通過使用 ipcMain
模塊來監聽 channel
,從而處理消息.通過 event.sender.send() 來響應.
ipcRenderer.sendSync(channel[, arg1][, arg2][, ...])
channel
Stringarg
(可選)
通過 channel
向主進程發送同步消息,也可以發送任意參數.參數會被JSON序列化,之后就不會包含函數或原型鏈.
主進程通過使用 ipcMain
模塊來監聽 channel
,從而處理消息, 通過 event.returnValue
來響應.
注意: 發送同步消息將會阻塞整個渲染進程,除非你知道你在做什么,否則就永遠不要用它 .
ipcRenderer.sendToHost(channel[, arg1][, arg2][, ...])
channel
Stringarg
(可選)
類似 ipcRenderer.send
,但是它的事件將發往 host page 的 <webview>
元素,而不是主進程.