Electron核心api详解

Electron 核心 API 按主进程 (Main Process)渲染进程 (Renderer Process)进程间通信 (IPC) 三大类划分,是开发跨平台桌面应用的基础。以下是最常用、最核心的模块与接口详解:


一、主进程 API (Main Process)

主进程是应用入口(main.js),负责生命周期、窗口、系统原生能力,可调用 Node.js 与全部 Electron API。

1. app ------ 应用生命周期总管

核心作用:控制启动、退出、系统路径、事件监听。

java 复制代码
const { app } = require('electron');

// 初始化完成(创建窗口必须在此后)
app.whenReady().then(() => { /* 创建窗口 */ });

// 所有窗口关闭(Windows/Linux 退出)
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit();
});

// macOS 点击 Dock 图标重新激活
app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) createWindow();
});

// 获取系统目录(用户数据、缓存、桌面等)
app.getPath('userData'); // 配置/数据存储
app.getPath('desktop');
app.getPath('downloads');

// 退出 / 重启
app.quit();
app.relaunch();
2. BrowserWindow ------ 窗口管理

核心作用:创建、控制原生窗口。

java 复制代码
const { BrowserWindow } = require('electron');

let mainWindow = new BrowserWindow({
  width: 1000,
  height: 700,
  title: 'Electron App',
  // 安全配置(必须)
  webPreferences: {
    nodeIntegration: false,       // 禁用 Node 直接注入
    contextIsolation: true,       // 开启上下文隔离
    preload: path.join(__dirname, 'preload.js') // 预加载脚本
  }
});

// 加载页面
mainWindow.loadFile('index.html');
// mainWindow.loadURL('https://example.com');

// 窗口操作
mainWindow.show();
mainWindow.hide();
mainWindow.maximize();
mainWindow.minimize();
mainWindow.close();

// 事件监听
mainWindow.on('closed', () => { mainWindow = null; });
3. webContents ------ 网页内容控制

核心作用:控制窗口内网页(调试、导航、打印、截屏)。

javascript 复制代码
// 打开开发者工具
mainWindow.webContents.openDevTools();

// 执行 JS
mainWindow.webContents.executeJavaScript('console.log("from main")');

// 导航
mainWindow.webContents.goBack();
mainWindow.webContents.goForward();

// 截屏
mainWindow.webContents.capturePage().then((img) => {
  fs.writeFileSync('screenshot.png', img.toPNG());
});
4. dialog ------ 原生对话框

核心作用:文件选择、保存、消息弹窗、错误提示。

javascript 复制代码
const { dialog } = require('electron');

// 打开文件选择
dialog.showOpenDialog({
  properties: ['openFile', 'multiSelections'],
  filters: [{ name: 'Images', extensions: ['jpg', 'png'] }]
}).then(result => {
  if (!result.canceled) console.log(result.filePaths);
});

// 保存对话框
dialog.showSaveDialog({ title: 'Save File' });

// 消息提示
dialog.showMessageBox({
  type: 'info',
  title: '提示',
  message: '操作成功',
  buttons: ['确定']
});
  • Menu:应用菜单、右键菜单
  • Tray:任务栏 / 状态栏图标(最小化到托盘)
6. globalShortcut ------ 全局快捷键
javascript 复制代码
// 注册全局快捷键(应用失焦也生效)
globalShortcut.register('CommandOrControl+Shift+X', () => {
  console.log('全局快捷键触发');
});
7. shell ------ 系统桌面集成
javascript 复制代码
const { shell } = require('electron');

shell.openExternal('https://electronjs.org'); // 打开默认浏览器
shell.showItemInFolder('C:/file.txt');       // 在资源管理器显示
shell.trashItem('path/to/file');             // 移到回收站
8. autoUpdater ------ 应用自动更新
  • 支持 macOS (Sparkle)、Windows (Squirrel) 自动更新

二、渲染进程 API (Renderer Process)

运行在 Chromium 中,默认不能直接访问 Node/Electron API ,必须通过 preload + contextBridge 安全暴露。

1. ipcRenderer ------ 向主进程发送消息
javascript 复制代码
// preload.js(安全暴露)
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electronAPI', {
  sendMsg: (channel, data) => ipcRenderer.send(channel, data),
  onMsg: (channel, callback) => ipcRenderer.on(channel, callback)
});

// 渲染页面(index.html)
window.electronAPI.sendMsg('to-main', 'Hello from Renderer');
window.electronAPI.onMsg('to-renderer', (event, data) => {
  console.log(data);
});
2. clipboard ------ 系统剪贴板
javascript 复制代码
const { clipboard } = require('electron');
clipboard.writeText('复制内容');
clipboard.readText();
3. nativeTheme ------ 系统主题(深色 / 浅色模式)
javascript 复制代码
const { nativeTheme } = require('electron');
nativeTheme.themeSource = 'dark'; // 强制深色
console.log(nativeTheme.shouldUseDarkColors); // 当前是否深色
4. screen ------ 显示器信息
  • 获取屏幕尺寸、多显示器布局

三、进程间通信 (IPC)

主 ↔ 渲染 通信核心:ipcMain + ipcRenderer

1. 主进程监听(ipcMain)
javascript 复制代码
const { ipcMain } = require('electron');

// 单向接收
ipcMain.on('to-main', (event, arg) => {
  console.log(arg);
  // 回复
  event.reply('to-renderer', '收到: ' + arg);
});

// 双向调用(Promise)
ipcMain.handle('invoke-main', async (event, arg) => {
  return `处理: ${arg}`;
});
2. 渲染进程调用(ipcRenderer)
javascript 复制代码
// 单向发送
ipcRenderer.send('to-main', '数据');

// 双向调用(async/await)
const res = await ipcRenderer.invoke('invoke-main', '参数');

四、安全核心 API

  • contextBridge:安全暴露 API 到渲染层,避免直接访问 NodeElectron
  • webPreferences
    • nodeIntegration: false
    • contextIsolation: true
    • sandbox: true(进一步沙箱)

五、常用辅助 API

  • session:管理 Cookie、缓存、代理、网络请求
  • powerMonitor:监听系统睡眠 / 唤醒 / 电源状态
  • webFrame:渲染进程缩放、字体、JS 注入

六、API 分类速记

  • 生命周期app
  • 窗口BrowserWindowwebContents
  • 系统交互dialogshellclipboardtraymenuglobalShortcut
  • 通信ipcMainipcRenderercontextBridge
  • 渲染层webFramenativeThemescreen
相关推荐
就叫_这个吧几秒前
HTML常用标签及举例使用
前端·html
utf8mb4安全女神8 分钟前
【rsyslog服务】把所有服务的“临界点”以上的错误都保存在/var/log/alert.log⽇志中
java·前端·javascript
YANQ66214 分钟前
7.bundlesdf本地安装
前端·webpack·node.js
csdn_aspnet25 分钟前
javascript 算法 LeetCode 编号 70 - 爬楼梯
开发语言·javascript·算法·leetcode·ecmascript
swipe25 分钟前
DeepAgents 多 Agent 深度调研助手工程实战:从 createDeepAgent 到可控调研工作流
javascript·面试·langchain
星夜夏空9931 分钟前
FreeRTOS学习(7)——任务列表
java·前端·学习
moMo1 小时前
JavaScript 变量提升,执行上下文里的各种门道
javascript·面试
weixin_471383031 小时前
由浅入深递归练习
前端·javascript·vue.js
tedcloud1231 小时前
ai-engineering-from-scratch部署教程:从零搭建AI应用环境
服务器·前端·人工智能·系统架构·edge
Kurisu5751 小时前
全面战争:战锤3修改器下载2026最新
前端