前言
之前都是在渲染进程中直接设置的可调用Node的方法,这样是不太合理的。
合理的做法是所有的NodeJS的方法都在主进程中调用。
如果需要渲染进程发起,则使用IPC事件交互,ipcRenderer则通过preload注入。
窗口及preload
窗口设置
1 | win = new BrowserWindow({ |
其中
nodeIntegration是否可以直接使用 Node.js API(如require,process,fs,path等)。contextIsolation渲染进程的 JavaScript 上下文是否与预加载脚本(preload)隔离。建议设置为
true,防止原型污染、API 劫持。contextBridge导出的变量能被访问但不能被修改。
preload.ts
注入脚本,这样渲染进程则可以使用window.ipcRenderer获取ipcRenderer对象。
1 | import { ipcRenderer, contextBridge } from 'electron' |
文件选择
主进程
1 | import { ipcMain, dialog } from "electron"; |
如果允许多选
1 | // 监听来自渲染进程的打开文件对话框请求 |
渲染进程
1 | async selectFileClick() { |
注意
返回的路径是数组
文件夹选择
主进程
1 | import {ipcMain, dialog} from "electron"; |
渲染进程
1 | const folderPath = ref("") |
文件弹窗保存
主进程
1 | const { ipcMain,dialog } = require("electron"); |
渲染进程
1 | window.ipcRenderer.send("savefile", "新脑图.txt"); |