electron主进程通信渲染进程
程序员文章站
2022-06-04 19:35:33
...
可以先去看看之前的https://blog.csdn.net/qq_40816649/article/details/103123143
主进程即electron的main.js。
渲染进程即BrowserWindow对象新建的。
定义一个js文件这里就叫renderer吧,在全局定义一个electron对象用来进行与html进行订阅事件通信。
global.electron = require('electron');
在BrowserWindow中通过node的path插件取到并传入这个js文件,这样在exe中的window上就有electron这个对象了。
new BrowserWindow(
width: 750,
height: 220,//712
webPreferences: {
javascript: true,
plugins: true,
nodeIntegration: true, // 是否集成 Nodejs
webSecurity: false,
preload: path.join(__dirname, './renderer.js'),//设置与index.html通信
});
主进程收发订阅事件
接收:引入electron中的ipcMain通过这个api进行接收渲染进程发送的事件并进行相应的处理
发送:需要找到我们定义的这个渲染进程这里我们定义的渲染进程是win所以拿这个名字来进行发送
const {
app,
BrowserWindow,
ipcMain,
Menu} = require('electron');
function createWindow() {
win = new BrowserWindow(windowConfig);
win.loadURL(`file://${__dirname}/index.html`);
getDevice()
Menu.setApplicationMenu(null)//隐藏顶部菜单
// win.webContents.openDevTools();//开启调试工具
win.on('close', () => {//回收BrowserWindow对象
win = null;
});
win.on('maximize', (e) => {//窗口最大化
allowChangeSize = false
})
win.on('unmaximize', (e) => {//窗口最小化
allowChangeSize = true
})
ipcMain.on('start', (event, args) => {//接受
win.webContents.send('isStart')//发送
connectRTMP(args)
});
ipcMain.on('stop', (event, args) => {//接受
console.log('stop')
killFluent()
});
ipcMain.on('reSize',(e,args) => {//控制window窗口大小
if (!allowChangeSize) return
win.setSize(args.width,220 + Number(args.height))
})
}
app.on('ready', createWindow);
html的发送和接收
直接在window对象上就能取到这个electron对象进行通信
window.electron.ipcRenderer.send("start",this.radioSet)//发送
window.electron.ipcRenderer.on('isStart', (event, message) => {})//接收
对于底层的东西还是要多去了解一下,这个事件订阅是个非常好的设计包括node,webview通信很多地方都用到了事件订阅。