Electron的流程模型
???Electron应用程序采用多进程模型,进程类型包括主进程和渲染进程。主进程只有一个,而渲染进程可以有多个。每个Electron应用程序只有一个唯一的主进程,也就是应用程序的入口点(就是我们前面实例程序中的main.js),由于主进程在Node.js环境中运行,因此它具有使用require模块和使用所有Node.js的能力。 ???主进程的主要目的是使用 BrowserWindow 模块创建和管理应用程序窗口。 ???每个打开的 BrowserWindow 都会生成一个单独的渲染器进程,负责渲染网页内容。 ???由于Electron最新的安全考虑,渲染器进程当中已经无权直接访问require或者Node.js API,因此我们无法通过require导入渲染进程的模块。在很多文章中,大部分编程案例想要使用require和Node.js API以及进行进程间通信,是通过导入 remote 模块来实现。
require('@electron/remote')
???@electron/remote是一个Electron模块,它将主进程中的Javascript对象连接到渲染器进程,从而可以在渲染器进程中直接访问主进程。 ???但是这个 remote 模块需要安装并且根据官网文档这个模块最终会被摒弃,Electron的官方文档中也没有使用这种方法,而是通过预加载(Preload)脚本来解决的。为了更加契合Electron的编程思想,我们这边就同官方一样利用预加载(Preload)脚本来实现在渲染进程中使用require和Node.js API以及进程间通信。 ???预加载脚本中的代码在网页内容加载前执行,它在渲染器的环境中执行,但是能够访问Node.js API,因此权限也更多。 ???自Electron 12以来,语境隔离是默认启用的,意味着预加载脚本和渲染器的主要运行环境是隔离的,因此预加载脚本中是通过contextBridge 模块来安全地实现交互。
|