Electron 深入浅出
目录一、Electron 概述二、Electron 架构1、Main 进程2、Renderer 进程3、Preload 脚本三、Electron 核心 API1、窗口管理2、IPC 通信3、文件与系统操作四、Electron 安全最佳实践重点难点1、禁用 NodeIntegration2、开启 Context Isolation3、使用 Preload 安全桥接4、防止远程代码执行5、内容安全策略CSP五、性能优化与打包1、内存优化2、打包优化六、Electron 高级应用场景1、多窗口/多标签页应用2、原生通知和系统托盘3、自动更新4、原生模块兼容5、集成前端框架七、项目实战1、Vue Electron 最小项目实践2、React Electron 最小项目实践八、常见坑重点一、Electron 概述Electron 是一个使用 Web 技术HTML、CSS、JS 来构建跨平台桌面应用的框架。它本质上是 Chromium Node.js 的组合允许你在桌面端使用 Node API同时渲染网页 UI。优点跨平台Windows、macOS、Linux。Web 技术栈前端开发者门槛低。丰富生态Node.js 模块可直接使用。缺点大体积每个应用都打包 Chromium (~50MB)。性能消耗高内存占用尤其是多窗口应用。安全性混合了 Node 环境需要注意防护。核心多进程架构Main vs Renderer安全隔离Context Isolation PreloadIPC 通信与异步处理跨平台资源管理难点安全防护XSS Node 权限高性能内存管理多窗口 重渲染自动更新 签名问题跨平台文件和系统 API 差异二、Electron 架构Electron 的核心是 多进程架构Main 进程Renderer 进程Preload 脚本1、Main 进程负责创建和管理窗口 (BrowserWindow)。系统级 API 调用文件、剪贴板、通知。与渲染进程通信IPC。特点Node.js 完全可用。只能有一个 Main 进程。2、Renderer 进程每个窗口对应一个 Renderer 进程Chromium 渲染进程。负责渲染 UI。响应用户交互。特点类似浏览器环境。默认 Node.js 受限需要开启 nodeIntegration 才能访问 Node API安全隐患。3、Preload 脚本介于 Main 和 Renderer 之间提供安全桥接。常用作 IPC 通信的安全层// preload.jsconst{contextBridge,ipcRenderer}require(electron);contextBridge.exposeInMainWorld(electronAPI,{sendData:(data)ipcRenderer.send(data,data),onData:(callback)ipcRenderer.on(data-reply,callback)});安全重点不要在 Renderer 中直接开启 Node推荐使用 contextBridge IPC。防止 XSS 导致本地文件被随意访问。三、Electron 核心 API1、窗口管理BrowserWindow主窗口类。constwinnewBrowserWindow({width:800,height:600,webPreferences:{preload:path.join(__dirname,preload.js),nodeIntegration:false,// 安全contextIsolation:true,// 强制隔离}});多窗口时要注意内存泄漏。可以用 BrowserView 实现复杂布局。2、IPC 通信Main ↔ Renderer 通信ipcMainMain 端监听ipcRendererRenderer 端发送// MainipcMain.on(msg,(event,arg){event.reply(reply,收到: arg);});难点异步通信、跨窗口通信容易产生回调混乱需要用 Promise 封装。3、文件与系统操作Node API 可直接用constfsrequire(fs);const{dialog}require(electron);dialog.showOpenDialog(win,{properties:[openFile]}).then(resultconsole.log(result.filePaths));重点难点文件路径跨平台差异Windows \ vs Linux /。权限问题macOS 需要用户授权访问。四、Electron 安全最佳实践重点难点安全配置示例// 安全的配置constmainWindownewBrowserWindow({webPreferences:{nodeIntegration:false,// 关键禁用 Node.js 集成contextIsolation:true,// 关键启用上下文隔离preload:path.join(__dirname,preload.js)// 使用预加载脚本}})mainWindow.loadURL(https://your-trusted-site.com)// 即使加载远程内容也安全1、禁用 NodeIntegrationnodeIntegration:false这是为了安全性防止远程代码执行等严重漏洞。2、开启 Context IsolationcontextIsolation:true这会将你的预加载脚本和渲染进程的代码运行在独立的世界Context中防止它们互相篡改。3、使用 Preload 安全桥接封装 API不直接暴露 Node。4、防止远程代码执行禁止 eval()、new Function()。阻止加载外部 URL。5、内容安全策略CSP尽量只加载本地文件。五、性能优化与打包1、内存优化避免多余窗口。使用 BrowserView 而非大量 BrowserWindow。回收无用对象和事件监听。2、打包优化Electron-builder / Electron-forge支持自动签名、压缩。支持多平台打包。ASAR 打包将资源打包成单文件提高读写效率。瘦身技巧剔除 devDependencies。压缩 Chromiumelectron-rebuild。六、Electron 高级应用场景1、多窗口/多标签页应用使用 BrowserView 或 webContents 动态管理内容。2、原生通知和系统托盘new Tray()new Notification()。3、自动更新electron-updater GitHub Release。4、原生模块兼容node-gyp构建注意跨平台问题。5、集成前端框架React / Vue / Svelte Webpack/Vite 构建 UI。渲染进程用 SPA 或 SSR。七、项目实战1、Vue Electron 最小项目实践Electron Vue 3 Vite 实践2、React Electron 最小项目实践Electron React Vite 实践八、常见坑重点场景问题解决NodeIntegration 开启安全隐患 XSS使用 Preload contextBridgeipcRenderer 回调回调混乱使用ipcRenderer.invoke/ async await多窗口内存泄漏每个窗口关闭要清理对象macOS 打包权限问题info.plist 配置文件访问权限自动更新签名 沙箱Windows 使用 SquirrelmacOS 使用 notarize

相关新闻

WinDbg内核调试原理:KD协议、符号解析与调试契约

WinDbg内核调试原理:KD协议、符号解析与调试契约

简介:本资源是面向Windows系统开发者、驱动工程师及高级运维人员的Windbg调试工具实战资料包,聚焦系统级故障排查、蓝屏分析与内核调试等核心场景。压缩包共307个文件,涵盖82个DLL(调试扩展与接口库)、39个EXE&#xf…

2026/10/18 3:12:14 阅读更多 →
专科生毕业论文AI工具实战指南:8个工具助你高效完成论文

专科生毕业论文AI工具实战指南:8个工具助你高效完成论文

专科生的毕业论文,说起来都是泪。选题、文献、初稿、改稿、查重,每一关都像是在渡劫。导师推荐的这8个AI论文工具,正好命中了我最需要的那些场景——文献看不进去、框架理不清、降重改到手抽筋。这篇文章我结合自己的实操体验和身边同学的真实…

2026/10/18 3:12:14 阅读更多 →
WinForm禁用最小化与还原:WndProc消息拦截实战

WinForm禁用最小化与还原:WndProc消息拦截实战

1. 桌面端窗口控制的核心需求拆解做过 WinForm 桌面项目的人大概率都碰到过这种需求:主界面一旦启动,就不希望用户随意最小化或者还原,甚至有些场景下连窗口尺寸都不允许改动。比如工业现场的看板程序、自助终端的操作界面、展厅里的展示软件…

2026/10/18 3:12:14 阅读更多 →

最新新闻

主从博弈下综合能源微网需求响应优化调度模型全解析

主从博弈下综合能源微网需求响应优化调度模型全解析

第一次看到“基于主从博弈的综合能源微网需求响应优化调度模型”这个题目,很多人会把它当成一个普通的优化调度问题来读:目标函数、约束条件、求解器一跑,出结果就完事了。但我实际调过这类模型之后发现,真正难的不是数学工具&…

2026/10/18 4:40:33 阅读更多 →
PyTorch Unet图像分割实战:DUT-OMRON数据集端到端训练与推理

PyTorch Unet图像分割实战:DUT-OMRON数据集端到端训练与推理

简介:本资源是一套面向深度学习初学者与图像分割实践者的Unet多尺度分割实战项目,聚焦二值图像分割任务,特别适用于学术研究、课程设计及算法复现场景。资源包含完整的DUT-OMRON数据集(训练集4135对images/masks、测试集1033对&am…

2026/10/18 4:40:33 阅读更多 →
信创监控实战:国产数据库与中间件指标采集及告警体系设计

信创监控实战:国产数据库与中间件指标采集及告警体系设计

1. 信创监控的痛点与整体架构设计1.1 为什么信创环境的监控不能照搬旧方案之前负责的某业务系统做信创替换,数据库从国外商业数据库换成某国产关系型数据库,中间件也换成了国产Web中间件。系统切过去第一天,监控大屏上将近一半的指标直接变成…

2026/10/18 4:40:33 阅读更多 →
推荐系统离线评估指标详解:准确率、召回率、F1与NDCG

推荐系统离线评估指标详解:准确率、召回率、F1与NDCG

做推荐系统,迟早要面对一个问题:我怎么量化推荐质量。业务方问一句“这次模型效果到底提升了没”,如果只丢出一句“感觉差不多”,那接下来的优化根本没法推进。准确率、召回率、F1、NDCG,这四个词就是推荐系统离线评估…

2026/10/18 4:40:33 阅读更多 →
schooldb代码实战:MySQL学生选课系统数据库设计全解析

schooldb代码实战:MySQL学生选课系统数据库设计全解析

搜“schooldb代码”的人,十有八九都是同一类需求:要么是数据库课设不知道从哪下手,要么是公司里突然要接一个校园管理相关的数据层,想找个偏教学向、能直接跑的库来抄作业。这个方向我帮不少人做过参考,也接过不少来问…

2026/10/18 4:40:33 阅读更多 →
学习打卡功能开发实战:从表结构设计到线上踩坑全记录

学习打卡功能开发实战:从表结构设计到线上踩坑全记录

前段时间接了一个学习类App的项目,需求池里躺着一个编号3.10的任务,名字就四个字:学习打卡。当时团队里不少人都觉得,这不就是给用户一个按钮,每天点一下签个到吗?结果真进入开发阶段才发现,这个…

2026/10/18 4:39:33 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →