electron 进程间通信
预加载脚本
1.src-electron添加preload.js
2.将preload.js挂载到主进程中
// 创建浏览器窗口时,调用这个函数。 const createWindow = () => { const win = new BrowserWindow({ width: 1600, height: 700, // title: '11111111', icon: join(__dirname, '../public/login1.png'), webPreferences: { // 引入预加载脚本 preload: join(__dirname, 'preload.js') } }) // development模式 if (process.env.VITE_DEV_SERVER_URL) { win.loadURL(process.env.VITE_DEV_SERVER_URL) // 开启调试台 win.webContents.openDevTools() } else { win.loadFile(join(__dirname, '../dist/index.html')) } Menu.setApplicationMenu(null) }
主进程使用 BrowserWindow 创建实例,主进程销毁后,对应的渲染进程回被终止。主进程与渲染进程通过 IPC 方式(事件驱动)进行通信。
单向通信(使用使用 ipcRenderer.send
API 发送消息,然后使用 ipcMain.on
API 接收)
1.在预加载脚本中添加(会被挂载到window上)
const { contextBridge, ipcRenderer } = require('electron') contextBridge.exposeInMainWorld('electronAPI', { // 单向 setTitle: (title) => ipcRenderer.send('set-title', title) })
2.在主进程中接收
const { ipcMain } = require('electron') ipcMain.on('set-title', (event, title) => { // 获取当前的窗口 const webContents = event.sender const win = BrowserWindow.fromWebContents(webContents) // 设置窗口标题 setTitle是electron内置的方法 win.setTitle(title) })
3.在渲染进程中调用
<script setup lang="ts"> const { electronAPI } = window const changeTitle = () => { electronAPI.setTitle(title.value) console.log(electronAPI?.node()) console.log(electronAPI?.chrome()) console.log(electronAPI?.electron()) } </script>
双向通信(使用使用 ipcRenderer.invoke
API 发送消息,然后使用 ipcMain.
handleAPI 接收)
1.在预加载脚本中添加(会被挂载到window上)
const { contextBridge, ipcRenderer } = require('electron') contextBridge.exposeInMainWorld('electronAPI', { // 双向 postMessage: () => ipcRenderer.invoke('post-message') })
2.在主进程中接收
const { ipcMain } = require('electron') ipcMain.handle('post-message', async () => { return new Promise((resolve, reject) => { setTimeout(() => { resolve('支付宝到账100万元') }, 2000) }) })
3.在渲染进程中调用
<script setup lang="ts"> import { ref } from 'vue' const message = ref('') const { electronAPI } = window const sentMessage = async () => { message.value = await electronAPI?.postMessage() } </script>
进程间通信官网:https://www.electronjs.org/zh/docs/latest/tutorial/ipc
electron更多可操作的功能(系统级)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了