javascript
JavaScript / Electron / ipcMain,ipcRenderer
一、ipcMain
ipcMain?模塊是類 EventEmitter 的實例。當在主進程中使用它的時候,它控制著由渲染進程(web page)發送過來的異步或同步消息,從渲染進程發送過來的消息將觸發事件。
1、發送消息
- 發送消息,事件名為?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 方法,之后需要監聽異步事件才能得到響應。
2、監聽消息
(1)ipcMain.on(channel, listener)
- channel?String
- listener?Function?
監聽?channel,當新消息到達時將通過?listener(event, args...)?調用?listener。
(2)ipcMain.once(channel, listener)
- channel?String
- listener?Function
為事件添加一個一次性用的 listener?函數。這個?listener?只有在下次的消息到達?channel?時被請求調用,之后就被刪除了。
(3)ipcMain.removeListener(channel, listener)
- channel?String
- listener?Function
為特定的?channel?從監聽隊列中刪除特定的?listener?監聽者。
(4)ipcMain.removeAllListeners([channel])
- channel?String (可選)
刪除所有監聽者,或特指的?channel?的所有監聽者。
3、事件對象
(1)event.returnValue
將此設置為在一個同步消息中返回的值。
(2)event.sender
返回發送消息的?webContents?,你可以調用?event.sender.send?來回復異步消息。
二、ipcRenderer
ipcRenderer?模塊是一個 EventEmitter 類的實例。它提供了有限的方法,你可以從渲染進程向主進程發送同步或異步消息, 也可以收到主進程的響應。
1、發送消息
(1)ipcRenderer.send(channel[, arg1][, arg2][, ...])
- channel?String
- arg?(可選)
通過?channel?向主進程發送異步消息,也可以發送任意參數。參數會被JSON序列化,之后就不會包含函數或原型鏈。
主進程通過使用?ipcMain?模塊來監聽?channel 來處理消息,通過 event.sender.send() 來響應。
(2)ipcRenderer.sendSync(channel[, arg1][, arg2][, ...])
- channel?String
- arg?(可選)
通過?channel?向主進程發送同步消息,也可以發送任意參數。參數會被JSON序列化,之后就不會包含函數或原型鏈。
主進程通過使用?ipcMain?模塊來監聽?channel,從而處理消息, 通過?event.returnValue?來響應.
注意:?發送同步消息將會阻塞整個渲染進程,除非你知道你在做什么,否則就永遠不要用它。
(3)ipcRenderer.sendToHost(channel[, arg1][, arg2][, ...])
- channel?String
- arg?(可選)
類似?ipcRenderer.send?,但是它的事件將發往 host page 的?<webview>?元素,而不是主進程。
2、監聽消息
(1)ipcRenderer.on(channel, listener)
- channel?String
- listener?Function
監聽?channel,當有新消息到達,使用?listener(event, args...)?調用?listener。
(2)ipcRenderer.once(channel, listener)
- channel?String
- listener?Function
為這個事件添加一個一次性?listener?函數。這個?listener?將在下一次有新消息被發送到?channel?的時候被請求調用,之后就被刪除了。
(3)ipcRenderer.removeListener(channel, listener)
- channel?String
- listener?Function
從指定的?channel?中的監聽者數組刪除指定的?listener。
(4)ipcRenderer.removeAllListeners([channel])
- channel?String (optional)
刪除所有的監聽者,或者刪除指定?channel?中的全部。
?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的JavaScript / Electron / ipcMain,ipcRenderer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通信 / SSH介绍和使用,SSH ke
- 下一篇: OpenLDAP / Ubuntu 18