Electron一些概念理解

前言

版本33.2.0

记录官方文档的一些初步理解

官方文档

自写demo: electron-demo 按钮点击发送http请求

主进程

一个Electron应用项目都会有一个主进程,启动入口

只有这个主进程,运行在Node.js环境中,可以require其他模块,用API

渲染器进程

每一个窗口都会有一个渲染器进程

这边我的理解是,就像一个html页面引入的一个普通js脚本

但是用上Electron的ipc通道API,就理解为是文档所说的一个渲染器进程

这里不能像主进程的js一样直接使用npm的模块

主进程的操作也不能直接渲染页面

主进程和渲染器进程交互

通信方式

通信方式 IPC通道

通过开发人员自己定义的"通道"来传递信息

在Electron框架中,涉及两个模块ipcMainipcRenderer

本身主进程和渲染器进程是相互隔离的

通过写一个preload.js (用来定义通道接口)(这个由主进程加载,因此可以调用API)

然后渲染器进程可以通过这个通道接口,与主进程交互,主进程中调用API操作

模式1: 渲染器进程到主进程(单向)

// preload.js
const { contextBridge, ipcRenderer } = require('electron/renderer')

contextBridge.exposeInMainWorld('electronAPI', {
  setTitle: (title) => ipcRenderer.send('set-title', title)
})

渲染器进程调用这个接口, 会将title发给主进程

window.electronAPI.setTitle(title)

上面用ipcRenderer.send 发送,主进程那边用ipcMain.on接收消息

文档提到了以前Electron 7的时候,ipcRenderer.send也可以用异步双向通信

模式2: 渲染器进程到主进程(双向)

// preload.js
const { contextBridge, ipcRenderer } = require('electron/renderer')

contextBridge.exposeInMainWorld('electronAPI', {
  openFile: () => ipcRenderer.invoke('dialog:openFile')
})

渲染器进程使用,await等待主进程的返回

const filePath = await window.electronAPI.openFile()

通过ipcRenderer.invokeipcMain.handle 搭配使用

其他

ipcRenderer.send也支持异步双向通信,但后续可能会被丢弃,不建议这样使用

相关推荐
风尚云网18 分钟前
风尚云网前端学习:一个简易前端新手友好的HTML5页面布局与样式设计
前端·css·学习·html·html5·风尚云网
木子020420 分钟前
前端VUE项目启动方式
前端·javascript·vue.js
GISer_Jing22 分钟前
React核心功能详解(一)
前端·react.js·前端框架
捂月25 分钟前
Spring Boot 深度解析:快速构建高效、现代化的 Web 应用程序
前端·spring boot·后端
深度混淆33 分钟前
实用功能,觊觎(Edge)浏览器的内置截(长)图功能
前端·edge
Smartdaili China33 分钟前
如何在 Microsoft Edge 中设置代理: 快速而简单的方法
前端·爬虫·安全·microsoft·edge·社交·动态住宅代理
秦老师Q34 分钟前
「Chromeg谷歌浏览器/Edge浏览器」篡改猴Tempermongkey插件的安装与使用
前端·chrome·edge
滴水可藏海35 分钟前
Chrome离线安装包下载
前端·chrome
endingCode39 分钟前
45.坑王驾到第九期:Mac安装typescript后tsc命令无效的问题
javascript·macos·typescript
m51271 小时前
LinuxC语言
java·服务器·前端