ipcRenderer 没有收到来自 webContents.send (Electron) 的消息

ipcRenderer not receiving the message from webContents.send (Electron)

在我程序的主要 window 中,我有一个按钮,如果单击该按钮,则会创建一个新的附加 window。当这个新的 window 完成加载时,我想向 ipcRenderer 发送消息;但是,到目前为止,我还无法使 ipcRenderer 能够接收消息,即使 window 已成功创建。

这是 main.js 中的代码片段:

const { ipcMain } = require('electron');

ipcMain.handle('open-window', () => {
    const newWindow = createWindow();
    newWindow.on('did-finish-load', () => {
        newWindow.webContents.send('opened-window');
    });
});

请注意,createWindow 是一个创建和 returns 浏览器 window 的函数。

下面是 preload.js 中的代码片段:

const { ipcRenderer } = require('electron');

window.addEventListener('DOMContentLoaded', () => {
  document.getElementById('openWindow').addEventListener('click', () => {
        ipcRenderer.invoke('open-window');
    });
});

ipcRenderer.on('opened-window', () => {
    console.log('received message!')
})

如您所见,我希望在新 window 完成加载后在控制台中收到字符串 received message!;然而,这并没有发生。我做错了什么?

您正在将 "opened-window" 发送到您创建的新 window,而不是按下按钮的原始按钮。

newWindow.webContents.send('opened-window')

而不是 newWindow,您需要使用按钮和 opened-window 处理程序

来引用 window