在Electron的渲染进程中,像dialog、menu模块是不能使用的,只能在主进程中使用。要想在渲染进程中使用,就要进行主、渲染进程之间通信,有三种方式:
一、ipcMain与ipcRenderer
通过这两个模块可以实现进程之间的通信。ipcMain 在主进程中使用,用来处理渲染进程发送的消息
ipcRenderer 在渲染进程中使用,用来发送信息给主进程或者接受主进程发来的消息
主进程:const {ipcMain} = require('electron')
// 监听渲染程序发来的事件
ipcMain.on('something', (event, data) => {
event.sender.send('something1', '我是主进程返回的值')
})渲染进程:
const { ipcRenderer} = require('electron')
// 发送事件给主进程
ipcRenderer.send('something', '传输给主进程的值')
// 监听主进程发来的事件
ipcRenderer.on('something1', (event, data) => {
console.log(data) // 我是主进程返回的值
})二、remote模块
使用 remote 模块,可以调用main 进程对象的方法,而不需要显示发送 进程间的消息。const { dialog } = require('electron').remote
dialog.showMessageBox({type: 'info', message: '在渲染进程中直接使用主进程的模块'})webContents
webContents负责主进程向渲染进程发消息。 它是BrowserWindow对象的一个属性。
主进程发消息:
const {app, BrowserWindow} = require('electron')
let win
app.on('ready', () => {
win = new BrowserWindow({width: 800, height: 600})
// 加载页面
win.loadURL('./index.html')
// 导航完成时触发,即选项卡的旋转器将停止旋转,并指派onload事件后。
win.webContents.on('did-finish-load', () => {
// 发送数据给渲染程序
win.webContents.send('something', '主进程发送到渲染进程的数据')
})
})三、渲染进程数据共享
可以使用localStorage 、sessionStorage来进程通信。
参考:https://blog.csdn.net/qq_41257129/article/details/105505892
网友回复
如何破解绕开seedance2.0真人照片生成视频 限制?
python有哪些算法可以将视频中的每个帧图片去除指定区域水印合成新的视频?
iphone的激光雷达数据能否实时传输到three三维空间中?
豆包sora等ai视频生成大模型生成的视频水印如何去除?
python如何实现在电脑上拨号打电话给手机?
具身机器人与人形机器人区别?
nodejs如何将一个完整的js代码文件切割成不同的部分混淆后动态加载进入html运行?
为啥windows.onerror捕获js错误是这样的{"message":"Script error.","source":"","lineno":0,"colno":0,"stack":null,
2026年ai将全面接管编程?
WebMCP是干啥的?


