Electron 进程间通信
创始人
2025-01-08 07:33:50
0

文章目录

  • 渲染进程到主进程(单向)
  • 渲染进程到主进程(双向)
  • 主进程到渲染进程 (单向,可模拟双向)

渲染进程到主进程(单向)

send (render 发送)on (main 监听)

// main.js 主要代码  // electron/main includes types for all main process modules. const { app, ipcMain } =  require("electron/main") app.whenReady().then(()=>{ 	// 需要在 HTML 文件加载之前监听,保证从渲染器调用之前处理程序能够准备就绪。 	ipcMain.on('set-title', (event, title) => { 	    const webContents = event.sender 	    const win = BrowserWindow.fromWebContents(webContents) 	    win.setTitle(title) 	}) 	createWindow(); // 创建窗口 }) 
// preload.js   // electron/renderer includes types for all renderer process modules. const { contextBridge, ipcRenderer } = require("electron/renderer") contextBridge.exposeInMainWorld("electronAPI", ()=>{ 	setTitle: (title) => ipcRenderer.send('set-title',title) }) 
// renderer.js  // 插入html中的js, 运行于渲染程序中 const setButton = document.getElementById('btn') const titleInput = document.getElementById('title') setButton.addEventListener('click', () => {     const title = titleInput.value     window.electronAPI.setTitle(title) }) 

渲染进程到主进程(双向)

invoke(render 发送)handle(main 监听)

const { app, ipcMain, dialog } =  require("electron/main") app.whenReady().then(()=>{ 	// 需要在 HTML 文件加载之前监听,保证从渲染器调用之前处理程序能够准备就绪。 	// IPC 通道名称上的 dialog: 前缀对代码没有影响。 它仅用作命名空间以帮助提高代码的可读性。 	ipcMain.handle('dialog:openFile', async () => { 	    const { canceled, filePaths } = await dialog.showOpenDialog() 	    if(!canceled) return filePaths[0] 	}) 	createWindow(); // 创建窗口 }) 
// preload.js   // electron/renderer includes types for all renderer process modules. const { contextBridge, ipcRenderer } = require("electron/renderer") contextBridge.exposeInMainWorld("electronAPI", ()=>{ 	openFile: () => ipcRenderer.invoke('dialog:openFile') }) 
// renderer.js  // 插入html中的js, 运行于渲染程序中 const setButton = document.getElementById('btn') const filePath= document.getElementById('filePath') setButton.addEventListener('click', async () => {     const path= await window.electronAPI.openFile()     filePath.innerText= path }) 

主进程到渲染进程 (单向,可模拟双向)

send on

// main.js  const { app, BrowserWindow, Menu, ipcMain } = require('electron/main') const path = require('node:path')  function createWindow () {   const mainWindow = new BrowserWindow({     webPreferences: {       preload: path.join(__dirname, 'preload.js')     }   })   const menu = Menu.buildFromTemplate([     {       label: app.name,       submenu: [         {           // 使用 webContents.send API 将 IPC 消息从主进程发送到目标渲染器。           // 其使用方式与 ipcRenderer.send 相同。           click: () => mainWindow.webContents.send('update-counter', 1),           label: 'Increment'         },         {           click: () => mainWindow.webContents.send('update-counter', -1),           label: 'Decrement'         }       ]     }   ])    Menu.setApplicationMenu(menu)   mainWindow.loadFile('index.html') }  app.whenReady().then(() => {   // 模拟双向通信,接收渲染进程发送的数据,"update-counter" 触发   ipcMain.on('counter-value', (_event, value) => {     console.log(value)    })   createWindow() }) 
// preload.js  const { contextBridge, ipcRenderer } = require("electron/renderer") contextBridge.exposeInMainWorld("electronAPI", { 	onUpdateCounter: (callback) =>  		ipcRenderer.on("update-counter", (event,value) => callback(value)), 	sendCount: (value) => ipcRender.send('counter-value', value) }) 
// render.js const count = document.getElementById("count") window.electronAPI.onUpdateCounter((value)=>{ 	const newValue = Number(count.innerText) + value; 	count.innerText = newValue.toString(); 	window.electronAPI.sendCount(newValue) }) 

相关内容

热门资讯

经核实!九江讨赏辅助中至小程序... 经核实!九江讨赏辅助中至小程序(辅助)原来真的有辅助攻略(有挂教学)1、完成九江讨赏辅助中至小程序有...
相较于以往!青龙辅助最新下载(... 相较于以往!青龙辅助最新下载(辅助)总是真的是有辅助插件(详细教程)1、每一步都需要思考,不同水平的...
第三方插件!蜂娱辅助(辅助)切... 第三方插件!蜂娱辅助(辅助)切实确实有辅助挂(有挂讲解)1、金币登录送、破产送、升级送、活动送。详细...
近日!朋朋政和510k辅助器(... 近日!朋朋政和510k辅助器(辅助)都是真的有辅助神器(有挂透视)1、每一步都需要思考,不同水平的挑...
2026版技巧!途游游戏辅助脚... 2026版技巧!途游游戏辅助脚本(辅助)原来是有辅助软件(的确有挂)1、任何途游游戏辅助脚本透视是真...
连日来!圣盛鄂州晃晃辅助(辅助... 连日来!圣盛鄂州晃晃辅助(辅助)总是是真的有辅助软件(有挂方针)1、打开软件启动之后找到中间准星的标...
据权威媒体报道!闲来辅助软件靠... 据权威媒体报道!闲来辅助软件靠谱吗(辅助)一直是有辅助技巧(有挂功能)一、闲来辅助软件靠谱吗可以开透...
做出回应!圣盛鄂州晃晃辅助(辅... 做出回应!圣盛鄂州晃晃辅助(辅助)一直真的是有辅助器(真是有挂);该软件可以轻松地帮助玩家将圣盛鄂州...
有玩家发现!丰城呱呱辅助器(辅... 有玩家发现!丰城呱呱辅助器(辅助)竟然是有辅助工具(有挂存在)1、首先打开丰城呱呱辅助器辅助器下载最...
于此同时!九九联盟辅助神器(辅... 于此同时!九九联盟辅助神器(辅助)确实确实有辅助工具(有挂解密)1)九九联盟辅助神器有没有挂:进一步...