将 IPC 消息从主进程发送到渲染进程 Electron

Send IPC message from main process to renderer process Electron

目前我有一个 Electron 菜单,上面有一个保存按钮。当按下这个保存按钮时,我希望向渲染器进程发送一个事件,以便渲染器处理该事件。

这是我尝试过的:

菜单来源

const menuTemplate = [
    {
        label: "File",
        submenu: [
            {
                label: "Save",
                accelerator: "Ctrl+S",
                click: () => {
                    BrowserWindow.getFocusedWindow().webContents.send("save");
                }
            },
        ]
    },
]

渲染源

ipc.on("save", () => {
    console.log("save");
})

预加载源

import { contextBridge, ipcRenderer } from "electron";

contextBridge.exposeInMainWorld("ipc", { on: ipcRenderer.on });

尝试此操作时,按下保存按钮时我没有得到任何输出,包括没有错误。我可以确认 Electron 使用了正确的菜单,并且 click() 函数正在执行。我还可以确认 ipc.on 确实在渲染器中定义。

我怎样才能让它工作?提前致谢。

尝试在开启功能中手动设置 this

contextBridge.exposeInMainWorld("ipc", { on: ipcRenderer.on.bind(ipcRenderer) });

或者创建一个传递参数的新函数:

contextBridge.exposeInMainWorld("ipc", { on(event, fn) { ipcRenderer.on(event, fn) } });