渲染进程:发送消息
// 分为同步与异步发送
// 异步发送:ipcRenderer.send(channel, data) // 自定义名称(发送端与接收端名称需一致),发送的内容
// 同步发送:ipcRenderer.sendSync(channel, data) // 自定义名称(发送端与接收端名称需一致),发送的内容
ipcRenderer.send('sendMsg', { msg: '给主进程异步发送消息' });
ipcRenderer.sendSync('sendSyncMsg', { msg: '给主进程同步发送消息' });
// 监听主进程的回复
ipcRenderer.on("replyMsg",(e,data)=>{
console.log('消息内容', data); // { msg: '主进程已经收到消息了' }
});
主进程:接收消息
const { ipcMain } = require('electron');
// 自定义名称(发送端与接收端名称需一致),接收消息回调函数
ipcMain.on('sendMsg', (event, data) => {
console.log('事件对象', event);
console.log('消息内容', data); // { msg: '给主进程异步发送消息' }
// 已接收到消息 并回复
console.log(event.sender);
e.sender.send("replyMsg", { msg: '主进程已经收到消息了' });
});
主进程:发送消息
const { BrowserWindow } = require("electron");
BrowserWindow.getFocusedWindow().webContents.send("rendererMsg", { msg: '给渲染进程发送消息' })
渲染进程:接收消息
ipcRenderer.on("rendererMsg",(e,data)=>{
console.log('事件对象', e);
console.log('消息内容', data); // { msg: '给渲染进程发送消息' }
});
通过预加载脚本暴露
以上的方式较繁琐,而且在默认情况下,渲染器进程没有权限访问
Node.js
和Electron
模块,引入会报错(可解决),所以需要从预加载脚本中暴露api
,这种方式可以不用侵入到前端脚本去监听事件,较为安全【更推荐】
配置一:electron/preload
import { contextBridge, ipcRenderer } from 'electron'
contextBridge.exposeInMainWorld('electronAPI', {
send: (channel, args) => ipcRenderer.send(channel, args),
sendSync: (channel, args) => ipcRenderer.send(channel, args),
once: (channel, listener) => ipcRenderer.once(channel, listener),
on: (channel, listener) => ipcRenderer.on(channel, listener)
})
配置二:electron/main
new BrowserWindow({
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
});
使用方式
// 渲染进程中使用:通过window.ipcRendererApi
window.ipcRendererApi.send('sendMsg', { msg: '给主进程异步发送消息' });
网友评论