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 会执行错误回调
版权声明:
作者:Teroun
链接:https://blog.bingxs.com/electronjctx.html
文章版权归作者所有,未经允许请勿转载。
THE END