前言
在Electron12时候被废弃,使用必须配置enableRemoteModule
1 | const win = new BrowserWindow({ |
在Electron14之后内置remote模块已经被移除,用enableRemoteModule
开启remote
也不能用了。
有如下几种解决方法:
- 使用
@electron/remote
模块替代 - 使用IPC传递数据
使用@electron/remote模块替代
安装
1 | npm install --save @electron/remote |
主进程中引入和初始化
安装好remote之后,我们需要在主进程和渲染进程中进行相应的设置才能使用。
首先是在主程序中引入和初始化remote。
1 | const remote = require("@electron/remote/main") |
渲染进程中引用
1 | //以前的写法 |
实例
main.js
1 | const { app,BrowserWindow,ipcMain,shell} = require("electron") |
渲染进程
1 | const {BrowserWindow} = require("@electron/remote") |
进程间通讯
渲染进程=>主进程=>渲染进程
异步
在渲染器进程 (网页) 中
1 | const { ipcRenderer } = require("electron"); |
在主进程中
1 | const { ipcMain } = require("electron") |
同步
在渲染器进程 (网页) 中
1 | const { ipcRenderer } = require('electron') |
在主进程中
1 | const { ipcMain } = require('electron') |
主进程=>渲染进程
在主进程中
1 | const { ipcMain } = require('electron') |
在渲染器进程 (网页) 中
1 | const { ipcRenderer } = require('electron') |
渲染进程=>渲染进程
利用主进程做消息中转
1 | // 渲染进程1 |
使用 ipcRenderer.sendTo()
1 | // 渲染进程 |
获取进程id的方法
第一种: 通过 global 设置和获取
1 | // 主进程中在global上自定义对象 |
第二种是: 主进程创建事件,发送信息(不推荐)
1 | // 主进程中 |
页面数据共享
以前使用remote来取主进程数据,现在要用rpc了。
所有进程间
推荐这种方式,在所有的进程中都能共享数据。
但是如果要想在主进程和渲染进程之间共享数据,就不能用上面所说的方式了。
在主进程中
1 | const { ipcMain } = require("electron"); |
在渲染器进程 (网页) 中
1 | const { ipcRenderer } = window.require("electron"); |
渲染进程之间
在两个网页(渲染进程)间共享数据最简单的方法是使用浏览器中已经实现的 HTML5 API。
其中比较好的方案是用 Storage API( localStorage
,sessionStorage
或者 IndexedDB
)。