Electron: 主进程和渲染进程之间通信

// 渲染进程 向 主进程 异步通信

// preload.js 预加载
const {ipcRenderer} = require('electron')
ipcRenderer.send('on-send-event', '这里是需要传递的参数') // 第一步

ipcRenderer.on('on-resend-event', (e, data) => {
    console.log(data) // 打印的是ipcMain.on传递过来的参数:这里还是传递的参数
}) // 第四步也就是最后一步



// main.js  主进程
const {ipcMain} = require('electron')
// 第二步
ipcMain.on('on-send-event', (e, data) => {
    console.log(data) // 打印的是ipcRenderer.send传递过来的参数:这里是需要传递的参数

    // 主进程主动给渲染进程传递信息(e.sender就是ipcMain)
    e.sender.send('on-resend-event', '这里还是传递的参数') // 第三步
})


// 渲染进程 向 主进程 同步通信

// preload.js 预加载
const {ipcRenderer} = require('electron')
const val = ipcRenderer.sendSync('on-send-event', '这里是需要传递的参数') // 第一步
console.log(val) // 第四步, 同步接收第三步传递过来的参数:来自于主进程的同步信息




// main.js  主进程
const {ipcMain} = require('electron')
// 第二步
ipcMain.on('on-send-event', (e, data) => {
    console.log(data) // 打印的是ipcRenderer.send传递过来的参数:这里是需要传递的参数

    // 主进程主动给渲染进程传递信息(e.sender就是ipcMain)
    e.returnValue = '来自于主进程的同步信息' // 第三步
})

主进程主动给渲染进程通信代码如下

// 主进程 向 渲染进程 通信


// main.js  主进程
const {ipcMain, BroserWindow} = require('electron')
// 第一步,在自定义菜单Menu的click事件触发
click() {
    // BrowserWindow.getFocusedWindow:获取当前窗口
    BrowserWindow.getFocusedWindo().webContents.send('mtp', '来自主进程')
}


// preload.js 预加载
const {ipcRenderer} = require('electron')

// 第二步
ipcRenderer.on('mtp', (e, data) => {
    console.log(data) // 打印的是BrowserWindow.getFocusedWindo().webContents.send传递过来的参数:来自主进程


}) 

实现从子窗口点击按钮后传递数据给父窗口的渲染进程实现逻辑:由子窗口的渲染进程传递消息给主进程,然后再由主进程传递消息给主进程的html渲染进程

// preload.js 预加载
const {ipcRenderer} = require('electron')

ipcRenderer.send('mtp', '我是参数') 
ipcRenderer.on('mti', (e, data) => {
    // 接收到数据data
}) 


// main.js  主进程
const {ipcMain, BroserWindow} = require('electron')

let mainWindowId = null;
function createWindow() {
    const mainWindow = new BrowserWindow({
        width: 1000,
        height: 800,
        webPreferences: {
 
        }
    })
    mainWindowId = mainWindow.id
}

ipcMain.on('mtp', (e, data) => {
    // data:我是参数
    let mainWin = BroserWindow.fromId(mainWinId)
    mainWin.webContents.send('mti', data) // 主进程给渲染进程html传递数据
})
相关推荐
飘逸飘逸3 小时前
若依前后端分离版使用Electron打包前端Vue为Exe文件
前端·vue.js·electron·vue·ruoyi
狼性书生1 天前
electron + vue3 + vite 渲染进程到主进程的双向通信
前端·javascript·electron
shmily_yyA1 天前
【2025】Electron + React 架构筑基——从零到一的跨平台开发
react.js·架构·electron
拂晓东夕2 天前
2025-03-07 electron无法打包的小问题
前端·javascript·electron
接着奏乐接着舞。2 天前
Electron应用中获取设备唯一ID和系统信息
前端·javascript·electron
shaoin_22 天前
electron打包结构了解
前端·javascript·electron
狼性书生3 天前
electron + vue3 + vite 主进程到渲染进程的单向通信
前端·javascript·electron·electron-forge
sky丶Mamba4 天前
Electron如何执行Python exe程序
javascript·python·electron
loriloy4 天前
在Electron中通过Node-API调用DLL导出函数的完整指南
前端·javascript·electron
环能jvav大师4 天前
Electron桌面应用开发:创建应用
前端·javascript·windows·ui·electron·前端框架