【问题标题】:Send IPC message from main process to renderer process Electron从主进程发送 IPC 消息到渲染进程 Electron
【发布时间】:2022-01-11 03:08:32
【问题描述】:

目前我有一个带有保存按钮的电子菜单。当按下此保存按钮时,我希望向渲染器进程发送一个事件,以便渲染器处理该事件。

这是我尝试过的:

菜单来源

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确实是在渲染器中定义的。

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

【问题讨论】:

  • 你在渲染器中哪里定义了ipc
  • preload.js,我现在编辑了帖子以显示预加载源代码。

标签: javascript electron ipc


【解决方案1】:

尝试在 on 函数中手动设置this

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

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

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

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 2022-01-15
    • 1970-01-01
    • 2019-02-07
    • 2018-05-29
    • 2018-01-05
    • 2021-12-04
    • 2017-06-01
    • 2016-07-05
    相关资源
    最近更新 更多