electron主进程与渲染进程的通信⽅式
这篇笔记主要解决的问题是Electron的主进程与渲染进程之间的通信.
使⽤ipcMain和ipcRenderer
// 来⾃官⽅的⽰例
const {ipcMain} = require('electron')
<('asynchronous-message', (event, arg) => {
console.log(arg) // prints "ping"
event.sender.send('asynchronous-reply', 'pong')
})
<('synchronous-message', (event, arg) => {
console.log(arg) // prints "ping"
})
要点:
1. 渲染进程可以通过ipcRenderer向主进程发送消息
2. 主进程通过ipcMain监听来⾃渲染进程的消息. 并根据消息类型执⾏不同的操作
进程通信方式
3. 主进程的回调⽅法包含event和arg两个参数. arg对象中保存了渲染进程传递的参数. 通过event.sender对象,主进程可以直接向渲染进程发
送返回消息. 如果主进程执⾏的同步⽅法,还可以通过设置urnValue来获取返回值.
使⽤ 模块
在渲染进程中,可以通过const {remote} = require('electron')来获取到remote对象. 通过这个对象可以允许渲染进程访问主进程的模块.
const {BrowserWindow} = require('electron').remote;
let win = new BrowserWindow({width: 800, height: 600});
win.loadURL('xxx');
  同样的,我们也可以通过remote对象访问到app对象。这样我们就可以访问到我们在主进程中挂载到electron.app对象上的⽅法。
// 主进程
const { app } = require('electron');
const utils = require('./utils');
app.utils = utils; // 将在 Electron 层实现的接⼝绑定到 app 上
// 渲染进程
const { remote } = require('electron');
function() {
// remote.app.utils 对象与主进程中的utils对象是⼀样的。
remote.st();
}
  要点:
通过remote对象,我们可以不必发送进程间消息来进⾏通信。但实际上,我们在调⽤远程对象的⽅法、函数或者通过远程构造函数创建⼀个新的对象,实际上都是在发送⼀个同步的进程间消息(官⽅⽂档上说这类似于JAVA中的RMI)。
也就是说,remote⽅法只是不⽤让我们显式的写发送进程间的消息的⽅法⽽已。在上⾯通过remote模块创建BrowserWindow的例⼦⾥。我们在渲染进程中创建的BrowserWindow对象其实并不在我们的渲染进程中,它只是让主进程创建了⼀个BrowserWindow对象,并返回了这个相对应的远程对象给了渲染进程。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。