Electron入門之ipcMain,ipcRenderer


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 String
  • listener Function 

監聽 channel, 當新消息到達,將通過 listener(event, args...) 調用 listener.

ipcMain.once(channel, listener)

  • channel String
  • listener Function

為事件添加一個一次性用的listener 函數.這個 listener 只有在下次的消息到達 channel 時被請求調用,之后就被刪除了.

ipcMain.removeListener(channel, listener)

  • channel String
  • listener Function

為特定的 channel 從監聽隊列中刪除特定的 listener 監聽者.

ipcMain.removeAllListeners([channel])

  • channel String (可選)

刪除所有監聽者,或特指的 channel 的所有監聽者.

【事件對象】

event.returnValue

將此設置為在一個同步消息中返回的值.

event.sender

返回發送消息的 webContents ,你可以調用 event.sender.send 來回復異步消息。

 

ipcRenderer 模塊是一個EventEmitter類的實例. 它提供了有限的方法,你可以從渲染進程向主進程發送同步或異步消息. 也可以收到主進程的相應.

【消息監聽】

ipcRenderer.on(channel, listener)

  • channel String
  • listener Function

監聽 channel, 當有新消息到達,使用 listener(event, args...) 調用 listener .

ipcRenderer.once(channel, listener)

  • channel String
  • listener Function

為這個事件添加一個一次性 listener 函數.這個 listener 將在下一次有新消息被發送到 channel 的時候被請求調用,之后就被刪除了.

ipcRenderer.removeListener(channel, listener)

  • channel String
  • listener Function

從指定的 channel 中的監聽者數組刪除指定的 listener .

ipcRenderer.removeAllListeners([channel])

  • channel String (optional)

刪除所有的監聽者,或者刪除指定 channel 中的全部.

【發送消息】

ipcRenderer.send(channel[, arg1][, arg2][, ...])

  • channel String
  • arg (可選)

通過 channel 向主進程發送異步消息,也可以發送任意參數.參數會被JSON序列化之后就不會包含函數或原型鏈.

主進程通過使用 ipcMain 模塊來監聽 channel,從而處理消息.通過 event.sender.send() 來響應.

ipcRenderer.sendSync(channel[, arg1][, arg2][, ...])

  • channel String
  • arg (可選)

通過 channel 向主進程發送同步消息,也可以發送任意參數.參數會被JSON序列化,之后就不會包含函數或原型鏈.

主進程通過使用 ipcMain 模塊來監聽 channel,從而處理消息, 通過 event.returnValue 來響應.

注意: 發送同步消息將會阻塞整個渲染進程,除非你知道你在做什么,否則就永遠不要用它 .

ipcRenderer.sendToHost(channel[, arg1][, arg2][, ...])

  • channel String
  • arg (可選)

類似 ipcRenderer.send ,但是它的事件將發往 host page 的 <webview> 元素,而不是主進程.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM