学习记录:electron主进程与渲染进程直接的通信示例【开箱即用】

electron主进程与渲染进程直接的通信示例

1. 背景:

electron+vue实现桌面应用开发

2.异步模式

2.1使用.send.on的方式

preload.js中代码示例:

javascript 复制代码
const { contextBridge, ipcRenderer} = require('electron');


// 暴露通信接口
contextBridge.exposeInMainWorld('electron', {
	// 渲染进程向主进程通信
	sendAppDataPath: function(){
		ipcRenderer.send('sendappdatapath')
	},
	// 主进程向渲染进程通信
	onAppDataPath: (callback) => ipcRenderer.on('appdatapath', (event, variable) => callback(variable)),
	// 使用请求、响应模式【也是异步模式】,上面的on,send同为异步模式
	gainAppDataPath: async () => {
		return await ipcRenderer.invoke('gainappdatapath');
	},
	// 同步模式
	syncAppDataPath: () => ipcRenderer.sendSync('syncappdatapath'),

});

main.js【主进程】:

javascript 复制代码
// 获取appdata路径,并返回给vue
ipcMain.on('sendappdatapath', function(event){
	// 方法1:返回变量给vue
	event.reply('appdatapath', appDataPath); // 可发送成功,接收需在vue mounted中接收
	// 方法2:使用.send 发送
	// event.sender.send('appdatapath', appDataPath); // 可发送成功,接收也需要再 vue mounted中接收
})

vue.js【渲染进程】:

javascript 复制代码
// 发送部分代码
methods: {
	demo: function(){
		window.electron.sendAppDataPath(); // 调用发送接口
	},
}
// 需要在vue中的mounted中监听
mounted() {
  	// 监听主进程的变量
	// 接收send、on的appdata变量
	window.electron.onAppDataPath((variable) => {
		console.log('接受到变量:' + variable)
	})
  },

2.2 使用.invoke的方式

preload.js中代码示例:

javascript 复制代码
const { contextBridge, ipcRenderer} = require('electron');


// 暴露通信接口
contextBridge.exposeInMainWorld('electron', {
	// 使用请求、响应模式【异步】
	gainAppDataPath: async () => {
		return await ipcRenderer.invoke('gainappdatapath');
	},
	// 同步模式
	syncAppDataPath: () => ipcRenderer.sendSync('syncappdatapath'),

});

main.js【主进程】:

javascript 复制代码
// 响应模式返回给vue
ipcMain.handle('gainappdatapath', () => {
	console.log('invoke back varable');
	return appDataPath;
})

vue.js【渲染进程】:

javascript 复制代码
// 在vue中的methods中
methods: {
	// 获取电脑apdata目录
		async gainAppDataPath() {
			// invoke响应模式 【异步】
			let appdatapath = await window.electron.gainAppDataPath();
			console.log('目录为:' + appdatapath)
		},
}

3. 同步模式

3.1 使用.sendSync

preload.js中代码示例:

javascript 复制代码
const { contextBridge, ipcRenderer} = require('electron');


// 暴露通信接口
contextBridge.exposeInMainWorld('electron', {
	// 同步模式
	syncAppDataPath: () => ipcRenderer.sendSync('syncappdatapath'),
});

main.js【主进程】:

javascript 复制代码
// 同步模式
ipcMain.on('syncappdatapath', (event) => {
	event.returnValue = xxx; 
})

vue.js【渲染进程】:

javascript 复制代码
// 发送部分代码
methods: {
	demo: function(){
		let syncappdatapath = window.electron.syncAppDataPath();
		console.log('同步模式目录为:' + JSON.stringify(syncappdatapath))
	},
}
相关推荐
全栈前端老曹13 分钟前
【MongoDB】Node.js 集成 —— Mongoose ORM、Schema 设计、Model 操作
前端·javascript·数据库·mongodb·node.js·nosql·全栈
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [drivers][input]serio
linux·笔记·学习
低代码布道师1 小时前
Next.js 16 全栈实战(一):从零打造“教培管家”系统——环境与脚手架搭建
开发语言·javascript·ecmascript
一位搞嵌入式的 genius1 小时前
深入 JavaScript 函数式编程:从基础到实战(含面试题解析)
前端·javascript·函数式
choke2332 小时前
[特殊字符] Python 文件与路径操作
java·前端·javascript
wuhen_n2 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
ZH15455891313 小时前
Flutter for OpenHarmony Python学习助手实战:GUI桌面应用开发的实现
python·学习·flutter
鹿心肺语3 小时前
前端HTML转PDF的两种主流方案深度解析
前端·javascript
编程小白20263 小时前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
学历真的很重要3 小时前
【系统架构师】第二章 操作系统知识 - 第二部分:进程与线程(补充版)
学习·职场和发展·系统架构·系统架构师