在 Electron 中将数据从渲染进程发送到渲染进程

use*_*817 5 javascript node.js electron

我正在使用 Electron 开发桌面应用程序,场景是我有 2 个 BrowserWindow,从 FirstBrwoserWindow,单击按钮后我将转到 SecondBrowserWindow。我已经在 FirstBrwoserWindow 的按钮单击上实例化了 SecondBrowserWindow 以避免对象已被破坏异常。
根据 Electron,如果我们想在进程之间发送数据,我们必须使用 IPC。所以实际的问题从这里开始,我在 FirstBrwoserWindow 的渲染器文件中创建 SecondBrowserWindow 对象,对于 IPC,我需要在主进程中获取 SecondBrowserWindow 对象。

我如何在 main.js 中获取 SecondBrowserWindow 对象并在那里使用 IPC.???

Bri*_*och 4

我解决这个问题的方法是使用 ipcRenderer 将数据从第一个窗口传递到主进程,然后使用 ipcMain 将其传递到第二个窗口BrowserWindow.webContents.send()

看起来有点像这样。

窗口1

...
// Emit an ipc message with your data
ipcRenderer('your-message', { foo: 'bar' });
...
Run Code Online (Sandbox Code Playgroud)

主要流程

...
let window1 = new BrowserWindow(...);
let window2 = new BrowserWindow(...);
...
// when ipc message received pass it on to second window object with webContents
ipcMain.on('your-message', (event, payload) => {
  window2.webContents.send('your-relayed-message', payload);
});
...
Run Code Online (Sandbox Code Playgroud)

窗口2

...
// when ipc messaged received in second window do what you want with the data
ipcRenderer.on('your-relayed-message', (event, payload) => {
  console.log(payload);
});
...
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是为了让两个窗口相互通信,您必须通过主进程中继消息。渲染进程彼此不可见。 (2认同)