没有为通道注册处理程序 - Electron IPC 处理/调用

Aka*_*iya 7 ipc node.js typescript electron

在我的电子应用程序中,我收到错误“在 EventEmitter../lib/renderer/api/ipc-renderer.ts.ipcRenderer.invoke 处没有为“通道名称”注册处理程序 ( Electron/js2c/renderer_init.js:1163 :19)”。IPC 句柄未注册,渲染器和主进程之间的通信未按 Windows 中的预期进行。

当我从 Windows 安装程序打开应用程序时,我看到此问题,并且从 Windows 上的应用程序打开应用程序时,它是间歇性的。

这是我如何使用 ipc 句柄/调用的代码片段。

在 Main.ts 文件中

import {ipcMain} from 'electron';
private registerIpcChannels(ipcChannels: IpcChannelInterface[]) {
        try {
            for(const channel of ipcChannels) {
                ipcMain.handle(channel.getName(), async (event, request) => await channel.handleInvoke(event, request))
            }
        } catch (err) {
            log.error(`Unable to register IPC channels: ${err.message}`, err);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在 Renderer.js 文件中:

import electron from 'electron';
sendMessage(msg) {
        let ipc = electron.ipcRenderer;
        ipc.invoke(channelName, msg);
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它在 MacOS 上工作得很好,但在 Windows 上却不行。我按照文档在电子应用程序中实现句柄/调用。环境信息:Electron - v8.5.2 Nodejs - v12.16.1 操作系统 - Windows 10

注意:这仅在首次启动时发生。刷新或退出并重新打开应用程序后,它可以正常工作

任何人都可以帮助找出为什么会出现这个问题吗?

pul*_*0ne 10

我也有同样的问题。我的问题是,在注册 IPC 处理程序之前,我指示 Electron 导航到我的应用程序。它只发生在第一次加载而不是后续加载/重新加载(和热重新加载)时的原因是因为 BrowserWindow 正在重新创建并且我的 IPC 处理程序已经注册(并在我的代码中重新注册)。

因此,请绝对确保您的处理程序在 BrowserWindow 加载调用 IPC 通道的渲染器代码之前已注册。