electron 两个渲染进程之间通信

一、使用主进程作为中介

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

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

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

javascript 复制代码
const { ipcRenderer } = require("electron");

ipcRenderer.send("custom-event", "message from renderer 1");

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

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

javascript 复制代码
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 模块接收主进程转发的消息。例如:

javascript 复制代码
const { ipcRenderer } = require("electron");

ipcRenderer.on("custom-event", (event, message) => {

  console.log(`Received message: ${message}`);

});

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

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

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

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

javascript 复制代码
localStorage.setItem("sharedData", "message from renderer 1");

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

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

javascript 复制代码
const data = localStorage.getItem("sharedData");

console.log(`Received data: ${data}`);

三、使用 BroadcastChannel 进行通信

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

1. 创建 BroadcastChannel

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

javascript 复制代码
const channel = new BroadcastChannel("my-channel");

2. 发送消息

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

javascript 复制代码
channel.postMessage("message from renderer 1");

3. 接收消息

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

javascript 复制代码
channel.addEventListener("message", (event) => {

  console.log(`Received message: ${event.data}`);

});
相关推荐
共享家95271 天前
基于 Coze 工作流搭建历史主题图片生成器
前端·人工智能·js
zhaoyin19941 天前
fiddler抓包工具使用
前端·测试工具·fiddler
微祎_1 天前
Flutter for OpenHarmony:构建一个 Flutter 单词拼图游戏,深入解析状态驱动 UI、交互式字母操作与教育类应用设计
javascript·flutter·ui
摘星编程1 天前
用React Native开发OpenHarmony应用:ProgressBar缓冲进度显示
javascript·react native·react.js
人机与认知实验室1 天前
<span class=“js_title_inner“>如何看待特斯拉第三代Optimus机器人?</span>
开发语言·javascript·机器人·ecmascript·unix
Doris8931 天前
【 Vue】 Vue3全面讲解文档
前端·javascript·vue.js
换日线°1 天前
vue 实现Element Plus的炫酷主题切换
javascript·vue.js
linweidong1 天前
大厂工程化实践:如何构建可运维、高稳定性的 Flutter 混合体系
javascript·flutter
Hexene...1 天前
【前端Vue】如何快速直观地查看引入的前端依赖?名称版本、仓库地址、开源协议、作者、依赖介绍、关系树...(Node Modules Inspector)
前端·javascript·vue.js
fanruitian1 天前
div水平垂直居中
前端·javascript·html