Electron 核心模块速查表

为了更全面地覆盖常用 API,以下表格补充了更多实用方法和场景化示例,同时保持格式清晰易读。

一、主进程模块

模块名核心用途关键用法 + 示例注意事项
app应用生命周期管理• 退出应用:app.quit()
• 重启应用:app.relaunch() 后需 app.quit()
• 获取版本信息:app.getVersion()
• 检查是否打包:app.isPackaged
• 跨平台退出逻辑:
app.on('window-all-closed', () => { if (process.platform !== 'darwin') app.quit()})
• 重启应用需先调用 relaunch()quit()
isPackaged 可区分开发/生产环境
• macOS 下窗口全关后应保留应用实例
BrowserWindow窗口管理• 置顶窗口:win.setAlwaysOnTop(true)
• 全屏切换:win.setFullScreen(!win.isFullScreen())
• 隐藏/显示:win.hide() / win.show()
• 设置标题:win.setTitle('新标题')
• 获取所有窗口:BrowserWindow.getAllWindows()
• 全屏时建议提供退出按钮
• 频繁显隐比创建销毁更高效
• 多窗口应用注意内存泄漏
ipcMain主进程通信• 一次性监听:ipcMain.once('channel', callback)
• 发送消息给所有窗口:
BrowserWindow.getAllWindows().forEach(w => w.webContents.send('msg', data))
• 异步处理:ipcMain.handle('task', asyncHandler)
once 适合初始化类消息
• 广播消息注意过滤已关闭窗口
handle 支持返回 Promise
Menu应用菜单管理• 创建菜单:
const menu = Menu.buildFromTemplate([ { label: '文件', submenu: [ { label: '退出', click: () => app.quit() } ]}])Menu.setApplicationMenu(menu)
• 上下文菜单:
win.webContents.on('context-menu', () => menu.popup())
• macOS 应用菜单第一项是应用名称
• 上下文菜单需监听右键事件
• 动态更新菜单使用 menu.items[index].visible = false
Tray系统托盘图标• 创建托盘:
const tray = new Tray('icon.png')<br>tray.setToolTip('我的应用')<br>tray.setContextMenu(menu)
• 点击显示窗口:tray.on('click', () => win.show())
• 图标路径需绝对路径
• macOS 托盘点击行为与 Windows 不同
• Linux 需安装额外依赖
dialog系统对话框• 错误提示:dialog.showErrorBox('错误', '文件读取失败')
• 多选文件:
dialog.showOpenDialog({ properties: ['openFile', 'multiSelections']})
• 保存文件:dialog.showSaveDialog()
showErrorBox 无需异步处理
• 大文件选择可设置过滤器
• 保存对话框可预设文件名
session会话管理• 清除缓存:
session.defaultSession.clearStorageData({ type: 'cache'})
• 拦截请求:
session.defaultSession.webRequest.onBeforeRequest( filter, callback)
• 清除数据是异步操作
• 请求拦截需在页面加载前设置
• 可用于实现离线模式或广告拦截

二、渲染进程模块

模块名核心用途关键用法 + 示例注意事项
ipcRenderer渲染进程通信• 发送同步消息(不推荐):
const result = ipcRenderer.sendSync('sync-channel', data)
• 移除所有监听:ipcRenderer.removeAllListeners('channel')
• 异步调用:ipcRenderer.invoke('async-task')
• 同步消息会阻塞UI,谨慎使用
• 组件卸载时务必移除监听
invoke 配合 ipcMain.handle 使用
webFrame页面渲染控制• 缩放页面:webFrame.setZoomFactor(1.2)
• 插入CSS:
webFrame.insertCSS('body { background: #f0f0f0; }')
• 设置文本缩放:webFrame.setTextZoomFactor(150)
• 仅在渲染进程可用
• 缩放会影响所有内容
• 可用于实现阅读模式
Notification系统通知• 带图标和点击事件:
new Notification({ title: '提醒', body: '有新消息', icon: 'notification.png'}).onclick = () => window.focus()
• 部分系统会限制频繁通知
• 图标尺寸建议 128x128
• 需用户授权才能显示
clipboard剪贴板操作• 复制HTML:clipboard.writeHTML('<b>加粗文本</b>')
• 读取RTF:clipboard.readRTF()
• 复制富文本:clipboard.write({ text, html })
• 复杂格式复制在不同系统表现可能不同
• 大内容复制可能影响性能
• 安全考虑,部分敏感操作需确认

三、通用模块

模块名核心用途关键用法 + 示例注意事项
shell系统交互• 移动文件到回收站:
shell.trashItem('/path/to/file')
• 打开外部链接:shell.openExternal('https://github.com')
• 显示在文件管理器中:shell.showItemInFolder('/path/to/file')
• 回收站操作不可恢复
• 目录路径必须存在
openExternal 有安全风险,需验证URL
nativeImage图像处理• 从Base64创建:
nativeImage.createFromDataURL(base64Str)
• 保存为文件:
fs.writeFileSync('out.png', image.toPNG())
• 调整大小:image.resize({ width: 64 })
• 大图片处理可能占用较多内存
• 支持格式:PNG, JPEG, ICO, ICNS
• 可用于生成托盘图标或缩略图
screen屏幕信息• 获取主屏幕尺寸:
screen.getPrimaryDisplay().workAreaSize
• 所有屏幕信息:screen.getAllDisplays()
• 监听显示变化:screen.on('display-added', callback)
• 多显示器环境需判断窗口所在屏幕
• 屏幕尺寸可能随分辨率变化
• 可用于实现多屏展示应用
process进程信息• 环境变量:process.env.NODE_ENV
• 内存使用:
process.getProcessMemoryInfo()
• 架构信息:process.arch
• 渲染进程中环境变量可能受限
• 内存信息获取是异步操作
• 可用于条件加载不同资源
crashReporter崩溃报告• 配置崩溃报告:
crashReporter.start({ productName: 'MyApp', companyName: 'MyCompany', submitURL: 'https://my-server.com/crashes'})
• 需在应用启动早期配置
• 开发环境可能不触发
• 可结合 Sentry 等服务使用

四、应用生命周期深度解析

1. 生命周期阶段与核心事件

Electron 应用生命周期可分为四个阶段:

阶段 1:启动初始化
事件/方法作用示例
app.whenReady()返回 Promise,等待应用就绪app.whenReady().then(createWindow)
will-finish-launchingmacOS 特有,启动初期事件app.on('will-finish-launching', () => { app.setAsDefaultProtocolClient('myapp')})
app.isReady()检查是否已就绪if (!app.isReady()) waitFirst
阶段 2:运行中交互
事件/方法作用示例
activate应用被激活(如点击 Dock)app.on('activate', () => { if (noWindows) createWindow()})
second-instance重复启动实例app.on('second-instance', () => { mainWindow.focus()})
open-file文件拖拽到应用(macOS)app.on('open-file', (e,f) => { sendToRenderer(f)})
阶段 3:退出前准备
事件/方法作用示例
before-quit即将退出(可取消)app.on('before-quit', (e) => { if (unsaved) e.preventDefault()})
will-quit即将退出(不可取消)app.on('will-quit', cleanupResources)
app.exit()强制退出(不触发事件)process.on('uncaughtException', () => app.exit(1))
阶段 4:退出完成
事件/方法作用示例
quit应用已退出app.on('quit', (e, code) => { log(`退出码: ${code}`)})

五、场景化API组合示例

1. 文件操作流程

// 主进程:选择文件 → 读取内容 → 返回结果
ipcMain.handle('read-file', async (e) => {const { filePaths } = await dialog.showOpenDialog({properties: ['openFile'],filters: [{ name: 'Text', extensions: ['txt'] }]});if (filePaths.length > 0) {return fs.promises.readFile(filePaths[0], 'utf8');}
});// 渲染进程:调用 → 显示结果
document.querySelector('#read-btn').addEventListener('click', async () => {try {const content = await ipcRenderer.invoke('read-file');document.querySelector('#content').textContent = content;} catch (err) {console.error('读取失败:', err);}
});

2. 窗口状态记忆

const STATE_FILE = path.join(app.getPath('userData'), 'window-state.json');// 保存窗口状态
function saveWindowState(win) {const state = { ...win.getBounds(), isMaximized: win.isMaximized() };fs.writeFileSync(STATE_FILE, JSON.stringify(state));
}// 恢复窗口状态
function loadWindowState() {try {return JSON.parse(fs.readFileSync(STATE_FILE, 'utf8'));} catch (e) {return { width: 800, height: 600 };}
}// 创建窗口时应用状态
app.whenReady().then(() => {const state = loadWindowState();let win = new BrowserWindow({x: state.x,y: state.y,width: state.width,height: state.height,webPreferences: { contextIsolation: true }});if (state.isMaximized) win.maximize();win.on('close', () => saveWindowState(win));
});

这份速查表涵盖了 Electron 开发中 80% 的常用 API 和典型场景。建议根据具体需求结合官方文档深入学习,并关注安全性最佳实践(如启用 contextIsolation、使用 contextBridge 暴露 API)。对于复杂功能,可进一步查阅 electron-storeelectron-builder 等生态库。

六、Electron 官网 API

https://www.electronjs.org/zh/docs/latest/api/app

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96474.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt C++ 图形绘制完全指南:从基础到进阶实战

Qt C 图形绘制完全指南&#xff1a;从基础到进阶实战 前言 Qt框架提供了强大的2D图形绘制能力&#xff0c;通过QPainter类及其相关组件&#xff0c;开发者可以轻松实现各种复杂的图形绘制需求。本文将系统介绍Qt图形绘制的核心技术&#xff0c;并通过实例代码演示各种绘制技巧…

二分搜索边界问题

在使用二分搜索的时候&#xff0c;更新条件不总是相同&#xff0c;虽然说使用bS目的就是为了target&#xff0c;但也有如下几种情况&#xff1a;求第一个target的索引求第一个>target的索引求第一个>target的索引求最后一个target的索引求最后一个<target的索引求最后…

【springboot+vue3】博客论坛管理系统(源码+文档+调试+基础修改+答疑)

目录 一、整体目录&#xff1a; 项目包含源码、调试、修改教程、调试教程、讲解视频、开发文档&#xff08;项目摘要、前言、技术介绍、可行性分析、流程图、结构图、ER属性图、数据库表结构信息、功能介绍、测试致谢等约1万字&#xff09; 二、运行截图 三、代码部分&…

20250907_梳理异地备份每日自动巡检Python脚本逻辑流程+安装Python+PyCharm+配置自动运行

一、逻辑流程(autocheckbackup.py在做什么) 1.连接Linux服务器 用 paramiko 登录你配置的 Linux 服务器(10.1.3.15, 10.1.3.26),进入指定目录(如 /home, /backup/mes),递归列出文件。 采集到的信息:服务器IP、目录、数据库名称、文件名、大小、修改时间。 2.连接Wind…

terraform-state详解

一、Treeaform-state的作用 Terraform-state是指Terroform的状态&#xff0c;是terraform不可缺少的生命周期元素。本质上来讲&#xff0c;terraform状态是你的基础设施配置的元数据存储库&#xff0c;terraform会把它管理的资源状态保存在一个状态文件里。 默认情况下&#xf…

四、kubernetes 1.29 之 Pod 生命周期

一、概述当容器与 pause 容器共享网络&#xff08;Network&#xff09;、IPC&#xff08;进程间通信&#xff09;和 PID&#xff08;进程命名空间&#xff09;后&#xff0c;二者形成了一种紧密的 "共享命名空间" 关系&#xff0c;共同构成了 Kubernetes 中 "Po…

AI与环保:礼貌用语背后的能源挑战与解决方案

程序员的技术管理推荐阅读 窄化效应&#xff1a;程序员与管理者的隐形情绪陷阱 从“激励”到“保健”&#xff1a;80后与90后程序员&#xff0c;到底想要什么&#xff1f; 从“激励”到“保健”&#xff1a;80后与90后程序员&#xff0c;到底想要什么&#xff1f; 场景引入&…

OpenCV C++ 特征提取:从角点检测到对象识别

特征提取是计算机视觉的核心技术,通过识别图像中具有代表性的关键点及其描述信息,实现图像匹配、对象识别、姿态估计等高级任务。本章将系统讲解从基础的图像金字塔、角点检测,到复杂的 ORB 和 SIFT 特征提取与匹配,最终实现基于特征的对象检测完整流程。 一、图像金字塔 …

Codeforces Round 1049 (Div. 2) D题题解记录

大致题意&#xff1a;给定nnn个区间(li,ri)(l_i,r_i)(li​,ri​)。每次选取两个尚未被标记的区间(l1,r1)(l_1,r_1)(l1​,r1​)与(l2,r2)(l_2,r_2)(l2​,r2​)&#xff0c;使得他们均被标记&#xff0c;同时可以任选x∈[l1,r1]&#xff0c;y∈[l2,r2]x\in[l_1,r_1]&#xff0c;y…

《WINDOWS 环境下32位汇编语言程序设计》第15章 注册表和INI文件

15.1 注册表和INI文件简介在一个操作系统中&#xff0c;无论是操作系统本身还是运行于其中的大部分应用程序&#xff0c;都需要使用某种方式保存配置信息。在DOS系统中&#xff0c;配置信息往往是软件的开发者根据自己的喜好用各种途径加以保存的&#xff0c;比如在磁盘上面写一…

JDK 17、OpenJDK 17、Oracle JDK 17 的说明

Java生态系统的核心概念&#xff1a;简单来说&#xff1a;JDK 17 是一个标准规范&#xff0c;定义了Java开发工具包第17个长期支持版应该包含什么功能。openjdk-17-jdk 是一个具体的实现&#xff0c;是遵循上述规范、由OpenJDK社区提供的开源软件包。下面我们通过一个表格和详细…

手写MyBatis第58弹:如何优雅输出可执行的SQL语句--深入理解MyBatis日志机制:

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

Spring Boot 监控实战:集成 Prometheus 与 Grafana,打造全方位监控体系

前言 在当今微服务架构盛行的时代&#xff0c;应用程序的监控变得尤为重要。Spring Boot 作为广泛使用的微服务框架&#xff0c;其监控需求也日益增加。Prometheus 和 Grafana 作为开源监控领域的佼佼者&#xff0c;为 Spring Boot 应用提供了强大的监控能力。本文将详细介绍如…

JS中的多线程——Web Worker

众所周知&#xff0c;JavaScript 是单线程运行的&#xff08;至于为什么是单线程可以看一下这篇文章——事件循环机制&#xff09;&#xff0c;当浏览器主线程被大量计算任务阻塞时&#xff0c;页面就会出现明显的卡顿现象。Web Worker 提供了在独立线程中运行 JavaScript 的能…

【SQL注入】延时盲注

sleep(n)​​: 核心延时函数。使数据库程序暂停 n秒。​​if(condition, true_expr, false_expr)​​: 条件判断函数。如果 condition为真&#xff0c;执行 true_expr&#xff0c;否则执行 false_expr。​​用于将延时与判断条件绑定​​。​​mid(a, b, c)​​: 字符串截取函数…

IntelliJ IDEA 2025.1 Java Stream Debugger 快速使用指南

1. 功能概览 Java Stream Debugger 提供 Trace Current Stream Chain 功能&#xff0c;用来在调试时分析和可视化 Stream 操作链。 主要用途&#xff1a; 在运行时查看流操作链的每一步输出找出 map/filter 等操作的问题避免手动加 peek() 打印调试2. 使用入口 在 IDEA 2025.1 …

ARM-指令集全解析:从基础到高阶应用

一、ARM 指令集体系结构版本ARM 公司定义了多个指令集版本&#xff1a;ARMv1&#xff1a;原型机 ARM1&#xff0c;没有用于商业产品。ARMv2&#xff1a;扩展 V1&#xff0c;包含 32 位乘法指令和协处理器指令。ARMv3&#xff1a;第一个微处理器 ARM6 核心&#xff0c;支持 Cach…

第3讲 机器学习入门指南

近年来&#xff0c;随着企业和个人生成的数据量呈指数级增长&#xff0c;机器学习已成为日益重要的技术领域。从自动驾驶汽车到流媒体平台的个性化推荐&#xff0c;机器学习算法已广泛应用于各个场景。让我们深入解析机器学习的核心要义。3.1 机器学习定义机器学习是人工智能的…

深入理解跳表:多层索引加速查找的经典实现

跳表&#xff08;Skip List&#xff09;是一种多层有序链表结构&#xff0c;通过引入多级索引加速查找&#xff0c;其核心设计类似于“立体高速公路系统”&#xff0c;底层是原始链表&#xff0c;上面有各种高度的"高架桥"。 高层道路跨度大&#xff0c;连接远方节点…

Flutter 视频播放器——flick_video_player 介绍与使用

在移动端应用中&#xff0c;视频播放是一个常见的功能场景&#xff0c;例如短视频、直播、课程、广告展示等。 Flutter 本身并没有直接提供视频播放器组件&#xff0c;而是依赖第三方库来实现。 今天要介绍的库是 flick_video_player&#xff0c;它基于 video_player 封装&…