electron渲染进程与主进程通信

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了electron渲染进程与主进程通信相关的知识,希望对你有一定的参考价值。

参考技术A 一、前端需要看的elecron的基本知识
Electron打包的应用包含两个部分:Electron的环境(node) — 主进程、web渲染环境 — 渲染进程。

Electron中,入口是js文件(通常为package.json里的main脚本),运行此文件的进程即为主进程,在主进程中使用BrowserWindow模块可以创建并管理web页面,也就是应用的GUI。

在主进程创建的每个web页面都运行着自己的进程,即渲染进程,渲染进程各自独立。

主进程和渲染进程之间是相互隔离的,无法直接进行数据通信。
Web页面因为安全限制,不能直接访问原生的GUI资源,Electron也一样,渲染进程如果想要进行原生的GUI操作,必须和主进程通信,请求相应的GUI操作。

Electron提供了集中渲染进程和主进程通信的方式:
1使用ipcMain和ipcRenderer模块;
2直接在渲染进程中使用remote模块;
3主进程向渲染进程发送消息;
4渲染进程之间的通信。

二、关于渲染进程与主进程通信
1、
渲染进程中

主进程中

2、这种我暂时没用过,event.sender.send也可以回复异步消息
使用 ipc 以异步方式在进程之间发送消息是首选方法, 因为它会在完成时返回, 而不会阻止同一进程中的其他操作.

此示例将从此进程(渲染器)发送异步消息 "Ping" 到主进程, 然后主进程回答 "Pong".

renderer.js 如下:
// 异步消息使用send方法,需要监听异步事件才能得到响应
ipcRenderer.send('asynchronous-message', 'ping');

main.js 如下:
ipcMain.on('asynchronous-message', function(event, arg)
console.log(arg); // prints "ping"
// 回应异步消息
event.sender.send('asynchronous-reply', 'pong');
);
3、同步与异步的区别

三、
直接在渲染进程中使用remote模块
remote 模块可以直接获取主进程中的模块。

// 在渲染进程打开提示对话框
const dialog = require('electron').remote
dialog.showMessageBox( opts );

四、
主进程向渲染进程发送消息
this.webviewWindow.webContents.send('ping');

五、
渲染进程间通信

如果数据不需要实时性,只是渲染进程之间数据的共享,那么使用 官方建议 即可。如果要求实时性,需要配合前几种种方式实现。

本文参考:
https://blog.csdn.net/hb_zhouyj/article/details/88710377?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

以上是关于electron渲染进程与主进程通信的主要内容,如果未能解决你的问题,请参考以下文章

07.electron-(渲染进程和主进程)通信

Electron 主进程与渲染进程通信

Electron 渲染进程主进程通信 02

08.electron-(渲染进程间的通信)

使用electron进行原生应用的打包---主进程与渲染进程之间的通信

17-7-20-electron中主进程和渲染进程区别与通信