将数据从渲染过程发送到电子

时间:2017-12-15 13:05:47

标签: javascript node.js electron

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

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

2 个答案:

答案 0 :(得分:1)

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

它看起来有点像这样。

窗口1

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

主要流程

...
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);
});
...

窗口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);
});
...

答案 1 :(得分:0)

你可以通过更多方式实现这一目标,但我建议你这样做:

1)当您收到在渲染器中打开第二个BrowserWindow的输入时,向main.js发送消息

2)从main.js打开第二个BrowserWindow ,这样你就可以控制它并以更清洁的方式向它发送信息。

通过这种方式,您可以在没有通信错误的情况下关闭之前的BrowserWindow,并为N BrowserWindows提供更强大的可扩展可读逻辑。