2021年4月

在说Electron进程通信的时候,先说一下Electron中的两种进程:主进程和渲染进程。

主进程通过创建 BrowserWindow 实例来创建网页。 每一个 BrowserWindow 实例在其渲染过程中运行网页,当一个BrowserWindow 实例被销毁时,对应的渲染过程也会被终止。简单来说,一个客户端就是一个主进程。

渲染进程只能管理相应的网页,一个渲染进程的崩溃不会影响其他渲染进程。渲染进程通过 IPC 与主进程通信在网在页上执行 GUI 操作。 出于安全和可能的资源泄漏考虑,直接从渲染器进程中调用与本地 GUI 有关的 API 受到限制。简单来说,一个页面就是一个渲染进程。

注意:主进程管理所有网页及其对应的渲染进程

- 阅读剩余部分 -

为啥会有这个奇葩的需求呢?其实这个需求还是有很多场景存在的!

例如我在做的可视化平台这个产品,是分WEB版和Electron客户端,使用的都是一套Vue的代码,WEB版是方便线上开发使用,Electron是方便离线使用(离线的时候读取本地数据,在线的时候拉取服务端数据)。在WEB端,我需要给用户一个下载Electron端的地址,但是我在Electron端的时候,就不希望在显示这个链接,所以就需要做一个客户端的检测!对,就是userAgent检测!

var userAgent = navigator.userAgent.toLowerCase();
if (userAgent.indexOf(' electron/') > -1) {
   // Electron-specific code
}

通过上面的代码,就可以检测到现在代码是在Electron端运行还是在WEB端运行,我本地使用的是Electron 9,可以正常使用。