// 渲染进程 向 主进程 异步通信
// 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传递数据
})