渲染器在使用 ipc 时不接收来自另一个渲染器的数据

Renderer doesn't receive data from another renderer while using ipc

我无法使用 ipc 从一个渲染器向另一个渲染器发送数据。我想要实现的目标如下:将变量从 index.js 发送到 cves.js。我保留了 console.log 输出用于调试。我收到 2 条消息 - "index.js sends update-target-os msg." 和 "main.js receives update-target-os msg and sends targetOS."。但是我没有得到 "cves.js receives targetOS".screen capture for reference

我的代码文件在这里:https://github.com/ohmtrivedi/electronProject

希望有人能帮我解决这个问题。刚刚学习了 Electron,并尝试构建一个用于学习目的的应用程序。

我查看了您的代码,对我来说,问题似乎是 here,您通过 mainWindow 的 [=14] 发送 targetOS 频道=].

mainWindow 是文件 src/index.htmlBrowserWindow 对象;但您想在 BrowserWindow 对象上为 src/cves.html.

接收它

实现您想要完成的目标的一种方法是更新您的代码以在 [=] 上为 src/cves.html 创建 BrowserWindow 对象(例如,cvesWindow) 23=] (当接收到 update-target-os 通道时)而不是在 index.js.

中的 cell_cves.addEventListener 方法中创建它

然后在 main.js 中,在您的 update-target-os 部分中,将您收到的值设置为 main.js 变量,比如 osGuess

然后,在你的 cves.js 文件中,你可以有这样的东西:

 ipcRenderer.send('cves-loaded', true);

您可以在 DOM 内容加载后执行它。这将通知主进程您的 CVES BrowserWindow 已加载。然后,main.js 可以发送事件的值,例如:

ipcMain.on('cves-loaded', (event, arg) => {
  cvesWindow.webContents.send('targetOS', osGuess);
})

这样它就被 cves BrowserWindow 接收了。

通过上面的逻辑更新,我能够在 cves.htmlosname 元素上显示值。

可能有更多方法可以实现此目的,但如果您只需要打开一个列出附加信息的对话框,我建议您使用 Single Page Application 方法。