Javascript 如何在electron中向不同的窗口发送消息?
我正在写我的第一个电子应用程序,所以请宽容一点:) 当用户按下主窗口上的按钮时,应该会打开一个新窗口,其中显示一些json字符串。 此事件由ipcMain获取:Javascript 如何在electron中向不同的窗口发送消息?,javascript,npm,electron,Javascript,Npm,Electron,我正在写我的第一个电子应用程序,所以请宽容一点:) 当用户按下主窗口上的按钮时,应该会打开一个新窗口,其中显示一些json字符串。 此事件由ipcMain获取: ipcMain.on("JSON:ShowPage", function(e, item) { createJSONWindow(item); }) 这是我创建新窗口的函数: function createJSONWindow(item) { let jsonWin = new BrowserWindow({
ipcMain.on("JSON:ShowPage", function(e, item) {
createJSONWindow(item);
})
这是我创建新窗口的函数:
function createJSONWindow(item) {
let jsonWin = new BrowserWindow({
width: 600,
height: 800,
center: true,
resizable: true,
webPreferences:{
nodeIntegration: true,
show: false
}
});
jsonWin.loadFile("jsonView.html");
ipcMain.on('JSON_PAGE:Ready', function(event, arg) {
jsonWin.webContents.send('JSON:Display', item);
})
jsonWin.once('ready-to-show',()=>{
jsonWin.show()
});
jsonWin.on('closed',()=>{
jsonWin = null;
});
}
现在我的问题是,当我打开多个JSONWindow
s时,它们中的每一个都会得到JSON:Display
消息并更新其内容。他们不应该彼此独立工作吗?jsonWin
总是一个新的浏览器窗口,不是吗
提前感谢。问题在于以下代码:
ipcMain.on('JSON_PAGE:Ready', function(event, arg) {
jsonWin.webContents.send('JSON:Display', item);
})
每次创建新窗口时,您都要订阅相同的消息。这意味着当ipcMain
获取'JSON\u PAGE:Ready'
消息时,它调用它注册的每个回调,并向每个窗口发送消息
在这种情况下,最简单的解决方案是使用传递给ipcMain
处理程序的事件将消息发送给将其发送到main的呈现程序。其次,在createJSONWindow
之外订阅一次:
ipcMain.on('JSON_PAGE:Ready', function(event, arg) {
e.sender.send('JSON:Display', item);
});
function createJSONWindow() { ... }
但是,'JSON:Display'
是否只是在页面加载后发送的?如果是这样,您可以将窗口的WebContent订阅到页面加载时触发的事件
jsonWin.webContents.on("did-finish-load", () => {
jsonWin.webContents.send(...);
});