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传递数据
})
相关推荐
_AaronWong3 小时前
实现 Electron 资源下载与更新:实时进度监控
前端·electron
alphageek83 小时前
Electron开源库入门教程:跨平台桌面应用框架
javascript·其他·electron·开源
xiaoyan201519 小时前
Electron38-Winchat聊天系统|vite7+electron38+vue3电脑端聊天Exe
vue.js·electron·vite
槿泽2 天前
Vue集成Electron目前最新版本
前端·vue.js·electron
LDM>W<3 天前
Electron下载失败
前端·javascript·electron
EndingCoder3 天前
Electron 新特性:2025 版本更新解读
前端·javascript·缓存·electron·前端框架·node.js·桌面端
小圣贤君4 天前
小说创作中的时间轴体验设计:事序图交互与用户体验优化
electron·vue·甘特图·时序图·写作软件
ayaya_mana4 天前
BilldDesk:基于Vue3+WebRTC+Nodejs+Electron的开源远程桌面控制
electron·开源·webrtc
卸任4 天前
Electron运行环境判断(是否在虚拟机中)
前端·react.js·electron
F2E_zeke4 天前
使用electron将vue3网页项目包装成pc客户端
javascript·vue.js·electron