從
主進程
到渲染進程
的異步通訊。web
ipcMain模塊是EventEmitter類的一個實例。 當在主進程中使用時,它處理從渲染器進程(網頁)發送出來的異步和同步信息。 從渲染器進程發送的消息將被髮送到該模塊。api
// 在主進程中. const { ipcMain } = require('electron') // 監聽asynchronous-message,接收渲染進程發送的消息 ipcMain.on('asynchronous-message', (event, arg) => { console.log(arg) // prints "ping" // 回覆消息 event.reply('asynchronous-reply', 'pong') }) // 監聽synchronous-message,接收渲染進程發送的消息 ipcMain.on('synchronous-message', (event, arg) => { console.log(arg) // prints "ping" // 返回的值 event.returnValue = 'pong' })
//在渲染器進程 (網頁) 中。 const { ipcRenderer } = require('electron') // 向主進程synchronous-message發送消息,並接收返回結果 console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // prints "pong" // 接收asynchronous-reply返回的消息 ipcRenderer.on('asynchronous-reply', (event, arg) => { console.log(arg) // prints "pong" }) // 向asynchronous-message發送消息 ipcRenderer.send('asynchronous-message', 'ping')
ipcMain.on(channel, listener)
channel
Stringlistener
Function監聽 channel
,當接收到新的消息時 listener
會以 listener(event, args...)
的形式被調用。數組
// 監聽message,接收渲染進程發送的消息 ipcMain.on('message', (event, arg) => { ... })
ipcMain.once(channel, listener)
channel
Stringlistener
Function添加一次性的 listener
。當且僅當下一個消息發送到 channel
時 listener
纔會被調用,隨後 <0>listener</0> 會被移除。框架
// 監聽message,接收渲染進程發送的消息 ipcMain.once('message', (event, arg) => { ... })
ipcMain.removeListener(channel, listener)
channel
Stringlistener
Function從監聽器數組中移除監聽 channel
的指定 listener
。異步
ipcMain.removeAllListeners([channel])
channel
String刪除全部監聽者,或特指的 channel
的全部監聽者.electron
傳遞給 callback 的 event 對象有以下方法:async
event.frameId
一個整數,表示發送此消息的呈現程序幀的ID。函數
event.returnValue
將此設置爲在一個同步消息中返回的值.ui
event.sender
返回發送消息的web內容,您能夠調用event.sender。發送以回覆異步消息 webContents.sendcode
event.reply
一個函數,它將向發送您當前正在處理的原始消息的呈現程序frane發送IPC消息。您應該使用此方法對發送的消息進行「回覆」,以確保回覆將進入正確的流程和框架。
從
渲染器進程
到主進程
的異步通訊。
ipcRenderer
是一個 EventEmitter 的實例。 你能夠使用它提供的一些方法從渲染進程 (web 頁面) 發送同步或異步的消息到主進程。 也能夠接收主進程回覆的消息。
ipcRenderer.on(channel, listener)
channel
Stringlistener
Function監聽 channel, 當新消息到達,將經過 listener(event, args...) 調用 listener。
ipcRenderer.on('refresh-page', (event, arg) => { ... })
ipcRenderer.once(channel, listener)
channel
Stringlistener
Function爲事件添加一個一次性用的listener 函數.這個 listener 只有在下次的消息到達 channel 時被請求調用,以後就被刪除了。
ipcRenderer.once('printerList', (event, arg) => { ... })
ipcRenderer.removeListener(channel, listener)
channel
Stringlistener
Function爲特定的 channel 從監聽隊列中刪除特定的 listener 監聽者。
ipcRenderer.removeAllListeners(channel)
channel
String移除全部的監聽器,當指定 channel 時只移除與其相關的全部監聽器。
ipcRenderer.send(channel[, arg1][, arg2][, ...])
channel
String...args
any[]經過 channel
發送異步消息到主進程,能夠攜帶任意參數。 在內部,參數會被序列化爲 JSON,所以參數對象上的函數和原型鏈不會被髮送。
主進程能夠使用 ipcMain
監聽channel 來接收這些消息。
ipcRenderer.send("printerList");
ipcRenderer.sendSync(channel[, arg1][, arg2][, ...])
channel
String...args
any[]返回 any
- 由 ipcMain
處理程序發送過來的值。
經過 channel
發送同步消息到主進程,能夠攜帶任意參數。 在內部,參數會被序列化爲 JSON,所以參數對象上的函數和原型鏈不會被髮送。
主進程能夠使用 ipcMain
監聽channel來接收這些消息,並經過 event.returnValue
設置回覆消息。
注意: 發送同步消息將會阻塞整個渲染進程,你應該避免使用這種方式 - 除非你知道你在作什麼。
ipcRenderer.sendSync("printerList");
ipcRenderer.sendTo(webContentsId, channel, [, arg1][, arg2][, ...])
webContentsId
Numberchannel
String...args
any[]經過通道向帶有webContentsId的窗口發送消息。
ipcRenderer.sendToHost(channel[, arg1][, arg2][, ...])
channel
String...args
any[]就像 ipcRenderer.send
,不一樣的是消息會被髮送到 host 頁面上的 <webview>
元素,而不是主進程。
event.senderId
返回webcontent。發送消息的id,您能夠調用event.sender. sendto (event)。要回復此消息,請參見ipcRenderer。發送到以獲取更多信息。這隻適用於從不一樣呈現程序發送的消息。直接從主進程集事件發送的消息。senderId爲0。