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
英文地址,請注明出處:http://en.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 封裝&…