[Electron]中IPC进程间通信
Electron中IPC
进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。在 Electron 中,进程使用 ipcMain 和 ipcRenderer 模块,通过开发人员定义的“通道”传递消息来进行通信。
本文介绍以下几个方面:
-
1-渲染进程到主进程(单项)
ipcRender.send()
-
2-主进程到渲染进程(单项)
WebContents.send()
-
3-渲染进程到到主进程(双向)
ipcRender.invoke(渲染进程) ipcMain.handle(主进程)
1.渲染进程到主进程
-
渲染进程通过ipcRender.send()API发送消息
-
主进程通过ipcMain.on()API接受信息
2.主进程到渲染进程
-
主进程通过WebContents.send()发送数据
-
渲染进程通过ipcRender.on()获取数据
3.渲染进程到主进程(双向)
-
渲染进程通过invoke调用API
-
主进程通过handle处理API
示例
功能:
-
渲染进程发送111到主进程
-
主进程发送222到渲染进程
-
渲染进程invoke主进程
// main.js
const { app, BrowserWindow,ipcMain } = require("electron")
const path = require("path")
var id = "";
const createWindow = () => {const win = new BrowserWindow({width: 800,height: 600,show: false,webPreferences:{preload:path.join(__dirname,"./preload.js")}})win.loadFile("./index.html")win.show()id = win.id
}
app.whenReady().then(() => {createWindow()
})
ipcMain.on("messageToMain",(event,text)=>{// ipcMain.on 来接收渲染进程发送的数据console.log("主进程从渲染进程接收到的数据:"+text);// 获取当前窗口// BrowserWindow.webContents.send 发送数据BrowserWindow.fromId(id).webContents.send("messageFromMain","222")
})
// ipcMain.handle 返回invoke调用
ipcMain.handle("getData",()=>{return "333"
})
app.on("window-all-closed", () => {app.quit()
})
// preload.js
const { contextBridge, ipcRenderer } = require("electron")
contextBridge.exposeInMainWorld("electronIpc", {// 预加载脚本暴露 ipcRenderer.sendsend: (text) => { ipcRenderer.send('messageToMain', text) },// 预加载脚本暴露 ipcRenderer.ononGet: (callback) => {ipcRenderer.on("messageFromMain", (event, text) => {callback(text)})},// 预加载脚本暴露 ipcRenderer.invokegetData: () => { return ipcRenderer.invoke("getData") }
})
<!-- index.html --> <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Electron的ipc通讯</title> </head> <body><h2>渲染进程到主进程(单向)</h2><div><button id="btnToMain">渲染进程发送到主进程</button></div><div><input type="text" id="sendText"></div><br><br><div>收到主进程发送到渲染进程的消息:</div><div><input type="text" id="messageFromMain" style="width: 300px;"></div><br><div><button id="btnInvoke">渲染进程invoke主进程</button></div><div><input type="text" id="messageInvokeMain" style="width: 300px;"></div><script src="./index.js"></script> </body> </html>
// index.js
window.onload = () => {var btnToMain = document.getElementById("btnToMain");btnToMain.addEventListener("click", () => {var sendText = document.getElementById("sendText").value;window.electronIpc.send(sendText)})
window.electronIpc.onGet((text) => {var messageFromMain = document.getElementById("messageFromMain");messageFromMain.value = text;})
var btnInvoke = document.getElementById("btnInvoke");btnInvoke.addEventListener("click",async ()=>{var getData = await window.electronIpc.getData();var messageInvokeMain = document.getElementById("messageInvokeMain");messageInvokeMain.value = getData;})
}
效果

相关文章:
[Electron]中IPC进程间通信
Electron中IPC 进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。在 Electron 中,进程使用 ipcMain 和 ipcRenderer 模块,通过开发人员定义的“通道”传递消息来进行通信。 本文介绍以下几个方面: 1-渲染进程到…...
数学建模-动态规划(美赛运用)
动态规划模型的要素是对问题解决的抽象,其可分为: 阶段。指对问题进行解决的自然划分。例如:在最短线路问题中,每进行走一步的决策就是一个阶段。 状态。指一个阶段开始时的自然状况。例如:在最短线路问题中ÿ…...
bat文件给多个Android设备安装apk
本文是安装一个apk 1、确保以下3个文件在同一个目录下 1>要安装的apk,这里是mmb.apk 2>设备名单,保存在.txt文件中,一行一个设备名,设备名通过adb devices获取,截图中是两个设备 txt文件中的样式 3>要运行…...
[数据集][目标检测]光伏板太阳能板缺陷检测数据集VOC+YOLO格式2400张3类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2400 标注数量(xml文件个数):2400 标注数量(txt文件个数):2400 标注…...
深入浅出计算机网络 day.1 概论④ 计算机网络的定义和分类
不要退却,要绽放魅力 我的心会共鸣 和你 —— 24.3.9 一、计算机网络的定义 计算机网络早期的一个最简单定义 现阶段计算机网络的一个较好的定义 二、计算机网络的分类 按交换方式分类 按使用者分类 按传输介质分类 按覆盖范围分类 按拓扑结构分类,可…...
rust引用-借用机制扩展
rust引用-借用机制还是有限制的,比如我们要在多次函数调用中修改参数、跨线程传递参数并发修改的场景,单纯使用引用-借用机制就不灵了(这种场景和引用-借用设计思想是冲突的)。这时需要借助rust提供的Rc、Arc、Cell、RefCell对机制…...
JVM的工作流程
目录 1.JVM 简介 2.JVM 执行流程 3. JVM 运行时数据区 3.1 堆(线程共享) 3.3 本地方法栈(线程私有) 3.4 程序计数器(线程私有) 3.5 方法区(线程共享) 4.JVM 类加载 ① 类…...
kibana配置 dashbord,做可视化展示
一、环境介绍 这里我使用的kibana版本为7.17版本。 语言选择为中文。 需要已经有es,已经有kibana,并且都能正常访问。 二、背景介绍 kibana的可视化界面,可以配置很多监控统计界面。非常方便,做数据的可视化展示。 这篇文章&…...
前后端分离项目Docker部署指南(下)
目录 前言: 一.安装nginx 创建目录 上传nginx.conf至/data/nginx/conf文件夹中 运行启动容器 上传静态资源文件 编辑 访问结果 前言: 在上一篇博客中,我们深入探讨了如何使用Docker部署一个前后端分离的项目中的后端部分。我们构建…...
算法->位运算
有关位运算的操作符 >> <<&|^~ 常见位运算操作 给定一个数,确定它的二进制中第x位是0还是1 (n >> x) & 1; 将一个数n的二进制中第x位修改为1 n | (1 << x) 将一个数n的二进制中第x位修改为0 n & (~(1 << x)) 提…...
【Python】成功解决ModuleNotFoundError: No module named ‘matplotlib‘
【Python】成功解决ModuleNotFoundError: No module named ‘matplotlib’ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈…...
centos7中python3.10找不到openssl解决方案
如果有用其他方法安装了其他版本openssl,记得卸载其他的openssl,删除其他的openssl相关文件。 yum remove openssl* rm -rf ***下载最新版的openssl文件 按照官网安装方法安装openssl 官方安装地址https://docs.python.org/3/using/unix.html#on-linu…...
【Spring Boot `@Autowired` Annotation】
文章目录 1. 使用Qualifier注解2. 使用Primary注解3. 手动注入(较少推荐) 在Spring Boot中,Autowired注解用于自动装配bean。默认情况下,它按照类型进行装配。当存在多个相同类型的bean时,就会出现以下错误:…...
03.axios数据提交和错误处理
一.axios常用请求方法和数据提交 1. 想要提交数据,先来了解什么是请求方法 请求方法是一些固定单词的英文,例如:GET,POST,PUT,DELETE,PATCH(这些都是http协议规定的)&am…...
无人机生态环境监测、图像处理与GIS数据分析
构建“天空地”一体化监测体系是新形势下生态、环境、水文、农业、林业、气象等资源环境领域的重大需求,无人机生态环境监测在一体化监测体系中扮演着极其重要的角色。通过无人机航空遥感技术可以实现对地表空间要素的立体观测,获取丰富多样的地理空间数…...
centos7.9升级ssh和openssl
一、环境 [roottmp179 package]# ssh -V OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 [roottmp179 package]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) 二、 升级前准备 mkdir /opt/package cd /opt/package wget https://www.openssl.org/source…...
HttpURLConnection详解及使用
HttpURLConnection 请求响应流程 设置连接参数的方法 setAllowUserInteractionsetDoInputsetDoOutputsetIfModifiedSincesetUseCachessetDefaultAllowUserInteractionsetDefaultUseCaches 发送URL请求 建立实际连接之后,就是发送请求,把请求参数传到…...
npm下载时下载失败解决方法
1.清楚缓存 npm cache clean --force2.切换下载镜像 1.查看当前使用的镜像地址命令 npm config get registry切换为淘宝镜像命令(安装一些package容易报错) npm config set registry https://registry.npm.taobao.org或官方: npm config…...
Python实战:浅析Python输入输出理解数据交换的基本原理
在Python编程中,输入输出是数据交换的基础。本文将深入探讨Python中的输入输出功能,包括标准输入输出、文件输入输出、格式化输出等。我们将通过具体的代码示例来展示如何使用Python进行数据输入和输出,并理解其背后的工作原理。 1. 标准输入…...
MySQL--explain执行计划详解
什么是执行计划? SQL的执行计划,通俗来说就是SQL的执行情况,一条SQL语句扫描哪些表,那个子查询先执行,是否用到了索引等等,只有当我们知道了这些情况之后才知道,才可以更好的去优化SQL…...
终极指南:免费获取 macOS 风格鼠标指针,让你的 Windows/Linux 桌面焕然一新
终极指南:免费获取 macOS 风格鼠标指针,让你的 Windows/Linux 桌面焕然一新 【免费下载链接】apple_cursor Free & Open source macOS Cursors. 项目地址: https://gitcode.com/gh_mirrors/ap/apple_cursor 想要为你的 Windows 或 Linux 系统…...
ai智能电话机器人,自动筛选精准意向客户
机器人打电话软件代替人工自动打电话,通话过程中会根据客户的意向等级进行ABCD分类,并通过语音和文字的方式保存与客户的通话过程。打出来意向客户实时推送到业务人员手机上,后续方便销售人员为第二次沟通做准备。1 5 1 364 537 21。1、自动呼…...
告别传统整流:手把手教你用MATLAB仿真Boost PFC电路,搞定电流谐波与低功率因数
告别传统整流:手把手教你用MATLAB仿真Boost PFC电路,搞定电流谐波与低功率因数 在电源设计领域,工程师们长期面临一个棘手难题:传统整流滤波电路虽然结构简单,却不可避免地带来电流谐波污染和低功率因数问题。想象一下…...
基于FPGA与DDS技术的多波形信号发生器:从Verilog实现到Vivado仿真
1. DDS信号发生器设计基础 第一次接触FPGA和DDS技术时,我被这个组合的灵活性深深吸引。DDS(直接数字频率合成)技术就像是一个数字化的"波形工厂",而FPGA则是这个工厂的"智能控制中心"。两者结合,可…...
WSL+1Panel组合拳:Windows电脑也能5分钟搞定的游戏服务器搭建指南
WSL1Panel组合拳:Windows电脑也能5分钟搞定的游戏服务器搭建指南 每次看到朋友在Linux系统上轻松搭建各种游戏服务器,作为Windows用户是不是总觉得少了点什么?别急,今天我要分享的这套组合方案,能让你的Windows电脑瞬间…...
api-testcase-generator功能及触发方法
高级特性自动处理认证信息(Basic Auth、Bearer Token、API Key)支持参数化、关联、定时器配置可配置线程组、循环次数、思考时间支持断言设置(状态码、响应体)你有具体的接口文档需要处理吗?直接上传或提供文档路径...
2026年OpenClaw(Clawdbot)本地环境4分钟本地喂奶级部署及使用流程【亲测】
2026年OpenClaw(Clawdbot)本地环境4分钟本地喂奶级部署及使用流程【亲测】。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服…...
DeepSeekMine RAG实战:我把公司项目文档塞进去,问了100个问题后总结的避坑指南
DeepSeekMine RAG实战:企业文档管理的百问测试与深度避坑指南 当我把公司整个项目的需求文档、设计稿、会议记录和代码注释全部导入DeepSeekMine时,原本以为这只是个简单的知识库搭建过程。但在一周内连续提出100多个专业问题后,这套系统展现…...
19块钱的24MHz逻辑分析仪,真能搞定STM32的I2C/SPI调试吗?我的实测体验
19元24MHz逻辑分析仪实战:STM32通信协议调试全记录 当我在淘宝看到标价19元的8通道24MHz逻辑分析仪时,第一反应是"这玩意儿能用吗?"——毕竟专业设备动辄上千元的价格早已深入人心。但作为一名常年混迹电子论坛的嵌入式爱好者&…...
OpenRGB:免费开源工具如何一站式管理所有RGB灯光设备?
OpenRGB:免费开源工具如何一站式管理所有RGB灯光设备? 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/Open…...
