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也支持异步双向通信,但后续可能会被丢弃,不建议这样使用

相关推荐
黑客老陈1 小时前
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
运维·服务器·前端·网络·安全·web3·xss
正小安1 小时前
Vite系列课程 | 11. Vite 配置文件中 CSS 配置(Modules 模块化篇)
前端·vite
暴富的Tdy2 小时前
【CryptoJS库AES加密】
前端·javascript·vue.js
neeef_se2 小时前
Vue中使用a标签下载静态资源文件(比如excel、pdf等),纯前端操作
前端·vue.js·excel
m0_748235612 小时前
web 渗透学习指南——初学者防入狱篇
前端
℘团子এ2 小时前
js和html中,将Excel文件渲染在页面上
javascript·html·excel
z千鑫2 小时前
【前端】入门指南:Vue中使用Node.js进行数据库CRUD操作的详细步骤
前端·vue.js·node.js
m0_748250743 小时前
Web入门常用标签、属性、属性值
前端