在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
网友回复
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?