Electron - IPC - 在窗口之间发送数据

Har*_*nic 9 ipc electron

在主要过程中,我创建了一个名为的窗口mainWindow.在按钮上单击,我创建一个新的browserWindow被调用notesWindow.

我想要做的就是从发送数据notesWindowmainWindow

我所做的是使用IPC发送首先将数据发送notesWindow到主进程,检索主进程上的数据,然后将该数据发送到mainWindow,但mainWindow无法接收发送方事件.将数据发送到主进程工作正常,但从主进程到browserWindow似乎不起作用.

main.js

const ipcMain = require('electron').ipcMain;

ipcMain.on('notes', function(event, data) {
      console.log(data) // this properly shows the data
      event.sender.send('notes2', data);
});
Run Code Online (Sandbox Code Playgroud)

noteWindow.js

const ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.send('notes', "new note");
Run Code Online (Sandbox Code Playgroud)

mainWindow.js

const ipcRenderer = require("electron").ipcRenderer;
ipcRenderer.on('notes2', function(event, data) {
    // this function never gets called
    console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

谁能解释我做错了什么?提前致谢!

Arn*_*ane 7

mainWindow无法接收事件,因为它没有被发送到它.该events.sender.send()代码main.js将数据发回给谁发送的notes事件,在这种情况下是noteWindow.因此notes2事件将被发送回noteWindow而不是mainWindow.

要发送notes2活动mainWindow,请结帐webContents.send().这允许主进程通过事件将数据发送到特定窗口.经过一些修改后,main.js它看起来与此类似:

ipcMain.on('notes', function(event, data) {
    mainWindow.webContents.send('notes2', data);
});
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我之前尝试过使用 webContents.send 但无法让它工作。`未捕获的异常:类型错误:无法读取未定义的属性'webContents'` 我像这样创建了 mainWindow `let mainWindow = new BrowserWindow({...})` 所以不确定为什么 mainWindow 未定义:S (2认同)