Electron:渲染和主进程通信
усилの博客 2022/9/24 Electron
# 渲染进程主动给主进程发送消息,主进程接收并回复消息
ipcMain
:主进程接收和发送消息ipcRenderer
:渲染进程接收和发送消息
分别加载渲染进程和主进程文件
ipcMain/ipcMain.js
主进程
const createWindow = () => {
require('./ipcMain/ipcMain');
}
1
2
3
2
3
ipcRenderer/ipcRenderer.js
渲染进程
<html>
<head></head>
<script src="./ipcRenderer/ipcRenderer.js"></script>
</html>
1
2
3
4
2
3
4
场景一:渲染进程给主进程发送异步消息
<button id="sendMsg">渲染进程执行主进程里面的方法 (异步)</button>
1
// ipcRenderer.js
const { ipcRenderer } = require('electron');
var sendMsgDom = document.querySelector("#sendMsg");
sendMsgDom.onclick = () => {
//渲染进程给主进程发送消息
ipcRenderer.send("sendMsg", {name: "张三", age: 20});
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
// ipcMain.js
const { ipcMain } = require('electron');
//接收渲染进程的通知
ipcMain.on("sendMsg",(e,data) => {
// 数据
console.log(data); // 输出: {name: "张三", age: 20}
// 事件对象
console.log(e);
})
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
场景二:渲染进程给主进程发送异步消息,主进程接收到异步消息以后通知渲染进程
<button id="sendMsgReplay">渲染进程执行主进程里面的方法,主进程给渲染进程反馈处理结果 (异步)</button>
1
// ipcRenderer.js
const { ipcRenderer } = require('electron');
var sendMsgReplayDom = document.querySelector("#sendMsgReplay");
//渲染进程给主进程发送消息
sendMsgReplayDom.onclick=()=>{
ipcRenderer.send("sendMsgReplay","渲染进程发送消息");
}
//监听主进程的回复的消息
ipcRenderer.on("replayRenderer",(e,data) => {
console.log(data) // 输出: {state: "接收到消息了"}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
// ipcMain.js
const { ipcMain } = require('electron');
//主进程接收到异步消息以后通知渲染进程
ipcMain.on("sendMsgReplay",(e,data) => {
console.log(data); // 输出:渲染进程发送消息
// 给渲染进程发送消息
e.sender.send("replayRenderer", {state: "接收到消息了"})
})
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
场景三:渲染进程给主进程发送同步消息
<button id="sendMsgSync">渲染进程和主进程通信 (同步)</button>
1
// ipcRenderer.js
const { ipcRenderer } = require('electron');
var sendMsgReplaySyncDom = document.querySelector("#sendMsgSync");
//同步发送消息
sendMsgReplaySyncDom.onclick = () => {
var replay= ipcRenderer.sendSync("sendMsgReplaySync","渲染进程发送同步消息");
console.log(replay);// 输出:我是主进程 已经收到了你的消息
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
// ipcMain.js
const { ipcMain } = require('electron');
//接收同步消息
ipcMain.on("sendMsgReplaySync",(e,data) => {
console.log(data); // 输出:渲染进程发送同步消息
e.returnValue = "我是主进程 已经收到了你的消息"
})
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 主进程主动给渲染进程发送消息,渲染进程接收
具体看: 05.electron-(自定义菜单)