博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Electron学习笔记:主进程与渲染进程的通信方式
阅读量:7012 次
发布时间:2019-06-28

本文共 1423 字,大约阅读时间需要 4 分钟。

这篇笔记主要解决的问题是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) // prints "ping"    event.returnValue = 'pong'  })

要点:

  1. 渲染进程可以通过ipcRenderer向主进程发送消息
  2. 主进程通过ipcMain监听来自渲染进程的消息. 并根据消息类型执行不同的操作
  3. 主进程的回调方法包含eventarg两个参数. arg对象中保存了渲染进程传递的参数. 通过event.sender对象,主进程可以直接向渲染进程发送返回消息. 如果主进程执行的同步方法,还可以通过设置event.returnValue来获取返回值.

使用 electron.remote 模块

在渲染进程中,可以通过const {remote} = require('electron')来获取到remote对象. 通过这个对象可以允许渲染进程访问主进程的模块.

const {BrowserWindow} = require('electron').remote;let win = new BrowserWindow({width: 800, height: 600});win.loadURL('https://xxx.com');

同样的,我们也可以通过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.app.utils.test();}

要点:

通过remote对象,我们可以不必发送进程间消息来进行通信。但实际上,我们在调用远程对象的方法、函数或者通过远程构造函数创建一个新的对象,实际上都是在发送一个同步的进程间消息(官方文档 上说这类似于JAVA中的RMI)。
也就是说,remote方法只是不用让我们显式的写发送进程间的消息的方法而已。在上面通过remote模块创建BrowserWindow的例子里。我们在渲染进程中创建的BrowserWindow对象其实并不在我们的渲染进程中,它只是让主进程创建了一个BrowserWindow 对象,并返回了这个相对应的远程对象给了渲染进程。

转载地址:http://omqtl.baihongyu.com/

你可能感兴趣的文章
react-native创建android原生模块
查看>>
分享一个基于Node的名片设计网站
查看>>
Express + Ejs实现一个简单的WebServer
查看>>
40 行代码内实现一个 React.js
查看>>
关于5G被激烈讨论的那些争端和冲突
查看>>
AlphaZero进化论:从零开始,制霸所有棋类游戏
查看>>
.NET仓储模式高级用例
查看>>
如何理解 Laravel 的 Ioc 容器
查看>>
代码艺术家之JS
查看>>
Microsoft Azure Site Recovery (2) 配置虚拟机保护
查看>>
具有邮件功能的用户和联系人有什么区别?-Exchange2003系列之八
查看>>
ORACLE学习笔记--性能优化4
查看>>
毕啸南专栏 | 对话李开复:AI科学家的转型之路
查看>>
iphone: 可编辑的tableView Move&Delete
查看>>
linux shell “(())” 双括号运算符使用
查看>>
Asp.net Ajax Accordion控件的用法
查看>>
WMI使用小工具——WMI代码生成器(转)
查看>>
测试我用WLW在CSDN上的第一篇博客
查看>>
爱上MVC3系列~使用视图模型的好处及与数据模型之间的赋值问题
查看>>
jQuery中的join方法
查看>>