我正在使用 Electron 和 vue 开发一个应用程序。
我使用这个解决方案在 main 和 render 之间进行通信,所以我有三个文件preload.js
,main 和 renderer。
// preload.js
const { contextBridge, ipcRenderer } = require("electron");
contextBridge.exposeInMainWorld("api", {
send: (channel, data) => {
// whitelist channels
let validChannels = ["msgbox", "loadall", "savekv", "saveall"];
if (validChannels.includes(channel)) {
ipcRenderer.send(channel, data);
}
}
});
// main
const { ipcMain, dialog } = require('electron')
ipcMain.on("msgbox", (event, args) => dialog.showMessageBox({ message: args }))
ipcMain.on("saveall", (event, config) => dialog.showMessageBox({ message: config }))
// renderer
test() {
window.api.send("saveall", "hahaha"); // <- does not work
window.api.send("msgbox", "haha"); // <- work
}
但是,在渲染文件中,window.api.send("msgbox", "haha");
有效而window.api.send("saveall", "hahaha");
无效。
Electron 版本 13.6.6 macOS Monterey 12.1