当前位置: 首页 > 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}`);});

http://www.lryc.cn/news/430531.html

相关文章:

  • 配置ROS环境
  • 力扣 128. 最长连续序列
  • Stable Diffusion AI绘画工具的安装与配置(MAC用户)
  • flowable源码解读——并行多实例节点任务是否是顺序生成
  • 【机器学习】AGI的基本概念、技术挑战和应用前景
  • flink 使用RocksDB作为状态后端
  • 【运维高级内容--MySQL】
  • 【仿真与实物设计】基于51单片机设计的打地鼠游戏机——程序源码原理图proteus仿真图PCB设计文档演示视频元件清单等(文末工程资料下载)
  • iPhone设备使用技巧:忘记密码的情况下如何解除iOS 18/17屏幕时间
  • 内网渗透的风行者—Yasso
  • Android13 app后台无法启动Abort background activity starts from
  • Day45 | 99.岛屿数量 深搜 广搜 100.岛屿的最大面积
  • css之grid布局(网格布局)
  • 数据可视化大屏模板-美化图表
  • 【与C++的邂逅】--- 类和对象(中)
  • [数据集][目标检测]瞳孔虹膜检测数据集VOC+YOLO格式8768张2类别
  • Day42 | 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II
  • 运维大规模K8S集群注意事项
  • 供应链系统源码的关键技术是什么?
  • git 修改远程仓库的 URL
  • 使用图数据库 Neo4j 处理对象之间的关系
  • 使用C#的异步和依赖注入实现网络数据存储
  • tomcat日志文件切割
  • Python将Word文档转为PDF
  • 深入浅出链表
  • Linux核心命令入门
  • 腾讯无界微前端框架介绍
  • Linux——网络(2)
  • 结合量子技术解决数据传输安全
  • 【Rust光年纪】提高开发效率:深入了解Rust语言中的数据库客户端和文件处理库