前言

在使用Electron开发过程中,渲染进程的开发变得很简单。大部分样式与业务逻辑都可用熟悉的前端技术来实现。但不可避免有些时候,渲染进程要与主进程通信。今天,我们就来聊聊主进程与渲染进程。

什么是主进程Main Process

通常,在主进程中运行的脚本控制应用程序的生命周期、显示图形用户界面及其元素、执行本机操作系统交互以及在网页中创建渲染进程。Electron 应用程序只能有一个主进程。

简单来说,主进程控制着整个应用程序的载体与所有渲染进程,假如你想执行应用程序关闭,最小化,窗口置顶等功能,就需要在主进程中操作啦。

什么是渲染进程Renderer Process

渲染进程就是我们的应用程序窗口。可以创建多个浏览器窗口,每个窗口都使用自己的独立渲染进程。渲染进程,就是我们通常进行前端开发的地方了

主进程与渲染进程通信

Electron中模块分为三种Main Process模块、Renderer Process模块和两种进程都可用模块。

事件监听

主线程中的模块方法,渲染进程是无法直接调用的。因此最常用的方法就是通过主进程中的ipcMain模块进行事件监听

electron 关闭正在运行的java electron进程_进程通信


在渲染进程通过ipcRenderer中的send方法进行事件发送

electron 关闭正在运行的java electron进程_进程通信_02

以此来实现渲染进程调用主进程中的方法。

模块调用

还有一种情况,就是我们不能仅靠事件监听来处理通信,我们想直接在渲染进程拿到主进程模块操作。说一个场景吧,就是cookie。

用Electron开发应用程序,对于cookie的操作不能再使用js-cookie了。主进程中有个叫做session的模块,通过session模块可以操作cookie。

在渲染进程中进行http请求,想对cookie进行get、set、remove。难道我还要在主进程中写上几个事件监听,渲染进程写上几个事件监听来回调用么?那绝对是反人类。

还好Electron中有一个remote模块。可在渲染进程中使用主进程模块。这对于渲染进程和主进程通信提供了一种简单方法。在使用remote模块之前,需要将webPreferences中的enableRemoteModule设置为true,以此来开启remote模块。

electron 关闭正在运行的java electron进程_vue.js_03

随后,我们就可以通过

let session = require('electron').remote.session;

拿到session模块了。具体的cookie如何操作以及cookie对象都有什么字段,都可以在官网文档中找到答案。

总结

以上,介绍了渲染进程如何调用主进程。同样主进程也可调用渲染进程。同样多种方式,如何操作可以查阅官网。
p.s. 最好在官网上查看文档,网上的其他文档可能都不知道是哪个版本的。一位当时看了网上的中文文档而不知何时callback被改成promise的受害者如是说道。