在主要过程中,我创建了一个名为mainWindow
的窗口。点击按钮,我会创建一个名为browserWindow
的新notesWindow
。
我想要做的是将数据从notesWindow
发送到mainWindow
我所做的是使用IPC发送,首先将数据从notesWindow
发送到主进程,检索主进程上的数据,然后将该数据发送到mainWindow
,但是{{1} }无法接收发件人事件。将数据发送到主流程工作正常,但从主流程到浏览器窗口似乎无法正常工作。
main.js
mainWindow
noteWindow.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);
});
mainWindow.js
const ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.send('notes', "new note");
任何人都可以解释我做错了什么吗?提前谢谢!
答案 0 :(得分:6)
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);
});
答案 1 :(得分:0)
无需在main.js
上设置ipc集线器。这就是我的做法。
这里的关键是,如果您想在renderer
之间进行直接ipc对话,他们需要彼此了解getCurrentWebContents().id
。
main.js
function createWindow() {
mainWindow = new BrowserWindow(...);
global.mainWindow = mainWindow;
...
}
noteWindow.js
const ipc = require("electron").ipcRenderer;
ipc.sendTo(
getGlobal("mainWindow").webContents.id,
"ChannelForMainWindow",
data,
web_component.id // for main window to send back
);
mainWindow.js
ipc.on("ChannelForMainWindow", (e, data, web_component_id) => {
// do something
});
noteWindow.js
让我们为主窗口回复添加监听器(如果有的话)
const ipc = require("electron").ipcRenderer;
ipc.on("ChannelForNoteWindow", e => {
...
});
ipc.sendTo(
getGlobal("mainWindow").webContents.id,
"ChannelForMainWindow",
data,
web_component.id // for main window to send back
);
mainWindow.js
ipc.on("ChannelForMainWindow", (e, data, web_component_id) => {
// do something
//send data back
ipc.sendTo(web_component_id, "ChannelForNoteWindow");
});