eletron应用、electron npm包和前端静态资源怎么通信

本文源自道招网《# eletron应用、electron npm包和前端静态资源怎么通信》

最近有个需求需要改动electron项目壳的功能,所谓壳的功能指的是electron套壳应用中前端静态资源自身做不了,需要借助electron应用的能力来实现的功能。

electron应用可以会需要引用npm包,只不过这些包是针对electon应用的。

分析

所以我们现在有这样三类资源可能存在通信

electron壳electron npm包前端静态资源,这些"应用"之间通常怎么通信呢?

  • electron壳 <--> electron npm包 electron壳直接引用electron npm包即可,类似前端静态资源直接引用对应的npm包。

  • electron壳 <--> 前端静态资源 electron壳通过创建BrowserWindow来loadFile加载将前端静态资源,把需要暴露的功能直接挂载前端的window上面,它们就能实现通信了

  • electron npm包 -- 前端静态资源 它们属于不同类型的"应用",它们直接不能直接进行通信,需要借助electron壳,走前面的"electron壳 <--> 前端静态资源"路线

不同类型的应用(比如node应用和C++应用)直接需要通过IPC通信,它们之间通信一般只能通过发送消息传递数据(json或字符串),无法像平时注册回调函数,一般只有同类型的应用才能注册回调函数。

举例

下面以一个electron npm包(自带静态资源,整个包类似一个小electron应用)与前端静态资源通信为例

electron npm包通过创建BrowserWindow来loadFile加载自身的前端资源来实现交互部分,对外暴露接口初始化窗口UI。

index.js

javascript 复制代码
class  Plugin{
	...
	open(options) {
	   const win = new BrowserWindow({
	   		...options
			webPreferences: {
				...
				preload: ('./preload.js')
			}
	   });
	   win.loadFile('xxx.html');
	   win.once('ready-to-show', () => {
			win.webContents.send('init', { list: ['aaa', 'bbb']})
	   })
	}
	onClick(options) {
	  this.options.onClick && ipcMain.on('Plugin_onClick', this.options.onClick);
	}
} 

preload.js

javascript 复制代码
// 转发electon的消息成前端资源能监听的实践
ipcRenderer.on( 'init', function (event, data) {
	window.dispatchEvent(new CustomEvent('InitNotify', {detail: data}));
});

window.addEventListener('InitNotify', (event) => {
	console.log('InitNotify', event); // handleInit
})

window.addEventListener('onClick', (event) => {
	ipcRenderer.send( 'onClick', event.detail);
})

ui.js

javascript 复制代码
export class UI {
	construct() {
	   this.openBtn = new Button('btn');
	   this.openBtn.onDidClick(e => {
	   		window.dispatchEvent(new CustomEvent('onClick', {detail: data}));
	   })
	}
}
相关推荐
耀耀_很无聊2 分钟前
[特殊字符] 05_Jenkins 部署前端项目实现自动化部署
前端·自动化·jenkins
CRMEB定制开发12 分钟前
CRMEB Pro版前端环境配置指南
前端·微信小程序·uni-app·商城源码·微信商城·crmeb
imber14 分钟前
Framer Motion & GSAP 实现酷炫动画
前端
ygming20 分钟前
Q43- code973- 最接近原点的 K 个点 + Q44- code347- 前 K 个高频元素
前端·算法
ygming22 分钟前
Hashmap/ Hashset- Q39~Q42内容
前端·算法
多啦C梦a22 分钟前
【前端必修】闭包、`this`、`箭头函数`、`bind`、节流,一篇文章全懂!
前端·javascript·html
归于尽22 分钟前
为什么别人用闭包那么溜?这 8 个场景照着用就对了
前端·javascript·面试
Hilaku24 分钟前
Vue 2与Vue 3响应式原理的对比与实现
前端·javascript·vue.js
自出洞来无敌手(曾令瑶)29 分钟前
浏览器 实时监听音量 实时语音识别 vue js
前端·javascript·vue.js·语音识别
在钱塘江1 小时前
《你不知道的JavaScript-上卷》-笔记-5-作用域闭包
前端