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渲染进程与主进程通信的主要内容,如果未能解决你的问题,请参考以下文章