当前位置: 首页 > 后端技术 > Node.js

Electron学习笔记:主进程与渲染进程的通信方式

时间:2023-04-03 19:25:58 Node.js

本笔记主要解决Electron主进程与渲染进程通信的问题。使用ipcMain和ipcRenderer//来自官方例子const{ipcMain}=require('electron')ipcMain.on('asynchronous-message',(event,arg)=>{console.log(arg)//prints"ping"event.sender.send('asynchronous-reply','pong')})ipcMain.on('synchronous-message',(event,arg)=>{console.log(arg)//打印“ping”事件.returnValue='pong'})重点:渲染进程可以通过ipcRenderer向主进程发送消息主进程通过ipcMain监听渲染进程的消息,根据消息类型进行不同的操作。主进程的回调方法包含两个参数,event和arg。渲染进程传递的参数保存在arg对象中。通过event.sender对象,主进程可以直接向渲染进程发送返回消息。如果主进程执行的是同步方法,也可以通过设置event.returnValue来获取返回值。在渲染过程中使用electron.remote模块,可以通过const{remote}=require('electron')获取远程对象。通过这个对象,可以允许渲染进程访问主进程的模块。const{BrowserWindow}=require('electron').remote;letwin=newBrowserWindow({width:800,height:600});win.loadURL('https://xxx.com');同样,我们也可以通过remote对象来访问app对象。这样我们就可以访问我们在主进程中挂载在electron.app对象上的方法。//主进程const{app}=require('electron');constutils=require('./utils');app.utils=实用程序;//将Electron层中实现的接口绑定到app中//渲染过程const{remote}=require('electron');function(){//remote.app.utils对象与中的utils对象相同主要过程。remote.app.utils.test();}重要提示:通过远程对象,我们可以在不发送进程间消息的情况下进行通信。但实际上,当我们调用远程对象的方法或函数或通过远程构造函数创建新对象时,实际上是在发送一个同步的进程间消息(官方文档说这类似于JAVA中的RMI)。换句话说,远程方法只是一种不允许我们在进程之间显式写入消息的方法。在上面的例子中通过remote模块创建了一个BrowserWindow。我们在渲染进程中创建的BrowserWindow对象实际上并不在我们的渲染进程中,它只是让主进程创建了一个BrowserWindow对象,并将对应的远程对象返回给渲染进程。