Electron 进程通信

Electron桌面应用中,Main主进程和Renderer渲染进程和Chromium(浏览器)进程

Main(main.js)

Renderer(preload.js)

Chromium(index.html)

 

通信大概关系:Main <ipcMain=ipcRenderer> Renderer <contextBridge> Chromium

 

ipcMain从主进程到渲染进程的异步通信。

ipcRenderer:从渲染器进程到主进程的异步通信。

contextBridge:在隔离的上下文中创建一个安全的、双向的、同步的桥梁。

 

main.js
const { ipcMain } = require('electron')
ipcMain.handle('test', (event,i) => {
  return i+1;
})

//或者使用 Promise 解决实际业务中回调问题
main.js
const { ipcMain } = require('electron')
ipcMain.handle('test', (event,i) => {
  return new Promise((resolve, reject) => {
    if(i == 1){
      resolve(i+1)
    }else{
      reject(i-1) //错误抛出
    }
  })
})

 

preload.js
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('electron',{
  test: (val) => ipcRenderer.invoke('test',val),
  test2: (val) => ipcRenderer.invoke('test',val)
})

 

index.html
<button onclick="ipc()" >通讯</button>
<script>
function ipc(){
  var test = window.electron.test(1);
  test.then(function (result){ //这里使用.then回调模式 返回结果是一个promise 
    console.log(test);
    alert(result);
  },function (e){  
    console.log(e); //错误回调
  });
}
</script>

 

点击通讯按钮 会输出弹出 2  通讯成功 index.html文件里面参数1改2 会执行错误回调

 

THE END