目录
上文已经讲述了 在electron中使用@electron/remote,一定要注意看你当前项目的 electron版本是多少!!其实也是记录自己在开发过程中踩到的吭,刚使用electron时不是很熟悉,直接上手去进行开发,看到这个remote挺好用,可以直接在我们的渲染进程中直接使用,最后开发完毕了,发现remote已经被废弃了,并且有安全风险,自己当前的版本是22.3.27;
为什么废弃remote
- 安全性问题:因为在main中contextIsolation设置为false,会将主进程的功能暴露给渲染进程,增加了安全风险;
- 维护成本高:模块实现复杂;
- 性能问题:主进程和渲染进程之间是属于同步操作,在高频调用时,会导致性能问题;
解决方案 ———— IPC通信
使用IPC通信 :ipcMain 和 ipcRender可以实现主进程和渲染进程的通信交互【IPC 通信能更灵活、安全、高效地实现主 、渲染进程交互,可控性更强 。】
在主进程main.js中,
nodeIntegration: false, // 禁用渲染进程直接集成 Node.js
contextIsolation: true, // 启用上下文隔离,增强安全
举例:还以打开文件夹举例:
1、在主进程使用ipcMain:
2、在preload.ts 预加载文件使用ipcRender:
const { contextBridge, ipcRenderer } = require('electron');
// 暴露自定义 API 给渲染进程,这里暴露打开用户手册的方法
contextBridge.exposeInMainWorld('electronAPI', {
openUserManual: () => {
return ipcRenderer.invoke('open-user-manual');
}
});
3 、在渲染文件中使用:
import React from "react"
const HelpBar = () => {
return (
<button onClick={async()=>await window.electrionAPI.openUserManual()}>打开用户手册</button>
);
};
export default HelpBar;
ps:当然@electron/remote 也可以继续使用,可以临时当一个过渡方案