当前位置: 首页 > news >正文

electron 两个渲染进程之间通信

一、使用主进程作为中介

使用主进程作为中介相对较为灵活,但可能会增加主进程的负担

1. 从一个渲染进程向主进程发送消息

在发送消息的渲染进程中,可以使用 ipcRenderer 模块向主进程发送消息。例如:

const { ipcRenderer } = require("electron");ipcRenderer.send("custom-event", "message from renderer 1");

2. 主进程接收并转发消息

在主进程中,可以使用 ipcMain 模块接收消息并转发给另一个渲染进程。例如:

const { ipcMain } = require("electron");ipcMain.on("custom-event", (event, message) => {// 查找目标窗口并发送消息const webContents = event.sender;const targetWindow = BrowserWindow.fromWebContents(webContents);targetWindow.webContents.send("custom-event", message);});

3. 接收消息的渲染进程接收消息:

在接收消息的渲染进程中,可以使用 ipcRenderer 模块接收主进程转发的消息。例如:

const { ipcRenderer } = require("electron");ipcRenderer.on("custom-event", (event, message) => {console.log(`Received message: ${message}`);});

二、使用 localStorage 或 sessionStorage 进行简单通信

使用存储进行通信较为简单,但只适用于简单的数据传递

1. 一个渲染进程写入数据

在一个渲染进程中,可以使用 localStorage 或 sessionStorage 来存储数据,例如:

localStorage.setItem("sharedData", "message from renderer 1");

2. 另一个渲染进程读取数据

在另一个渲染进程中,可以读取存储的数据,例如:

const data = localStorage.getItem("sharedData");console.log(`Received data: ${data}`);

三、使用 BroadcastChannel 进行通信

使用 BroadcastChannel 可以实现直接的通信,但需要注意兼容性问题。

1. 创建 BroadcastChannel

在两个渲染进程中,可以创建一个 BroadcastChannel 实例,并使用相同的频道名称。例如:

const channel = new BroadcastChannel("my-channel");

2. 发送消息

在一个渲染进程中,可以使用`postMessage`方法发送消息,例如:

channel.postMessage("message from renderer 1");

3. 接收消息

在另一个渲染进程中,可以通过监听`message`事件来接收消息,例如

channel.addEventListener("message", (event) => {console.log(`Received message: ${event.data}`);});

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 教育行业,等保之重
  • 2534. 乘方 [CSP-J 2022]
  • WIN/MAC 图像处理软件Adobe Photoshop PS2024软件下载安装
  • Android开发语言Kotlin简介
  • 硬件寄存器的简单理解
  • http重要的状态码【精简版】
  • 前端理论总结(js)——原型链 // 原型 // 浅拷贝和深拷贝
  • 爬取央视热榜并存储到MongoDB
  • 前端宝典十六:深入浅出8大设计模式
  • WIFI驱动开发
  • go中的并发处理
  • LEAP模型在能源环境发展、碳排放建模预测及分析中实践应用
  • 伏图芯片应力仿真功能介绍
  • 如何正确使用 Parallels Desktop 的快照功能
  • 分意图 Prompt 调试、后置判别改写、RLHF 缓解大模型生成可控性
  • 分享一款快速APP功能测试工具
  • Angular数据绑定机制
  • Apache的80端口被占用以及访问时报错403
  • FastReport在线报表设计器工作原理
  • laravel 用artisan创建自己的模板
  • node-glob通配符
  • python大佬养成计划----difflib模块
  • Redis 中的布隆过滤器
  • Solarized Scheme
  • 排序算法学习笔记
  • 前端路由实现-history
  • 前端学习笔记之观察者模式
  • 深度解析利用ES6进行Promise封装总结
  • 深度学习在携程攻略社区的应用
  • 深入浏览器事件循环的本质
  • Linux权限管理(week1_day5)--技术流ken
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 如何在招聘中考核.NET架构师
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (C语言)球球大作战
  • (function(){})()的分步解析
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (windows2012共享文件夹和防火墙设置
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (九)One-Wire总线-DS18B20
  • (一) storm的集群安装与配置
  • (一)认识微服务
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (原創) 物件導向與老子思想 (OO)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)setTimeout 和 setInterval 的区别
  • .form文件_一篇文章学会文件上传
  • .NET Core跨平台微服务学习资源
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 反射的使用
  • /tmp目录下出现system-private文件夹解决方法
  • @Bean, @Component, @Configuration简析
  • @ComponentScan比较