Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在electron中向不同的窗口发送消息?_Javascript_Npm_Electron - Fatal编程技术网

Javascript 如何在electron中向不同的窗口发送消息?

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({

我正在写我的第一个电子应用程序,所以请宽容一点:)

当用户按下主窗口上的按钮时,应该会打开一个新窗口,其中显示一些json字符串。 此事件由ipcMain获取:

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