欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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通信很多地方都用到了事件订阅。

上一篇: electron

下一篇: electron