进程间通信
🚀🚀首发:CSDN碰磕,分享自己的学习日志
???晴
??学无止境
📅2022/6/7
目的
IPC模块通信
由主进程的的ipcMain和渲染进程的ipcRenderer进行通信
他们俩都是EventEmitter对象
🐟从渲染进程到主进程
📚写法
Callback写法
- ipcRenderer.send(channel,…args)
- ipcMain.on(channel,handler)
🚀示例
不要忘记初始化项目 npm init -y
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
进程间通信
</body>
<script src="./renderer.js"></script>
</html>
主进程
const {app,BrowserWindow,Notification, ipcMain} =require('electron')
let win
app.on('ready',()=>{
win=new BrowserWindow({
width:500,
height:500,
webPreferences:{
nodeIntegration:true
}
})
win.loadFile('index.html')
handeIPC()
})
function handeIPC(){
ipcMain.on('msg',(e,b,c)=>{
console.log("hello world",b,c)
})
}
渲染进程
const {ipcRenderer} =require("electron")
ipcRenderer.send('msg',1,2,3)
除了第一个参数,剩下的就是传来的参数了~ on的第一个参数与send的第一个参数需保持一致
Promise写法
Electron7.0后,处理请求+响应模式
- ipcRenderer.invoke(channel,…args)
- ipcMain.handle(channel,handler)
🚀示例
顺便把Notifcation一起用上~
首页不变
主进程:
const {app,BrowserWindow,Notification,ipcMain}= require('electron')
let win
app.on("ready",()=>{
win=new BrowserWindow({
width:300,
height:300,
webPreferences:{
nodeIntegration:true,
contextIsolation: false
}
})
win.loadFile('./index.html')
handleIPC()
})
function handleIPC(){
ipcMain.handle("work-notifcation",async function(a,b,c){
console.log("hello world",b,c)
})
}
渲染进程
const {ipcRenderer}=require("electron")
let res=await ipcRenderer.invoke('work-notifcation',1,2)
🐟从主进程到渲染进程
📚写法
- ipcRenderer.on(channel,handler)
- webContents.send(channel)
🚀示例
主要代码
win.wenContents.send('msg')
ipcMain.on('msg',()=>{
alert('接收到数据')
})
🐟从渲染进程到渲染进程
🦈通知事件
- 通过主进程转发(在5.0版本之前)
- ipcRenderer.sendTo(在5.0版本之后)
🦈数据共享
- 使用web技术,像localStorage本地存储等等…
- 使用remote(不推荐)
🚀示例
global.shareObject={
winId:win.webContents.id
}
let sharedObject=remote.getGlobal('shareObject')
let winId=sharedObject.winId
ipcRenderer.sendTo(winId,'msg',1)
ipcRenderer.on('msg',(a,b)=>{
alert("拿到数据",b)
})
这样就学会了Electron中进程通信了~
|