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传递数据
})
相关推荐
卸任2 天前
Electron自制翻译工具:增加中英互译
前端·react.js·electron
皓子2 天前
海狸IM桌面端:AI辅助开发的技术架构实践
前端·electron·ai编程
xiaobangsky4 天前
Electron桌面应用下,在拍照、展示pdf等模块时,容易导致应用白屏
javascript·electron
就是我5 天前
Electron多窗口应用实战
前端·javascript·electron
我怎么能这么帅气5 天前
从“文件失踪案”说起:Electron 中 getAppPath 和 getPath 的妙用
前端·javascript·electron
集成显卡7 天前
图片压缩工具 | Electron+Vue3+Rsbuild开发桌面应用
前端·javascript·electron·vue
朝阳398 天前
Electron-vite【实战】MD 编辑器 -- 系统菜单(含菜单封装,新建文件,打开文件,打开文件夹,保存文件,退出系统)
electron·编辑器
朝阳398 天前
Electron-vite【实战】MD 编辑器 -- 文件列表(含右键快捷菜单,重命名文件,删除本地文件,打开本地目录等)
electron·编辑器
HCl+NaOH=NaCl+H_2O8 天前
quasar electron mode如何打包无边框桌面应用程序
前端·javascript·electron
屋昂仼8 天前
Electron 桌面程序读取dll动态库
前端·javascript·electron