gpt4 book ai didi

javascript - 当您有多个窗口时,Electron ApplicationMenu仅适用于最后一个窗口

转载 作者:行者123 更新时间:2023-12-03 12:22:06 24 4
gpt4 key购买 nike

我想在我的Electron应用程序中有多个窗口,每个窗口应该有自己的applicationMenu。但是,当我打开一个新窗口时,应用程序菜单中的功能(例如reloadopenDevTools)仅适用于刚打开的最后一个窗口。
为什么会这样呢?
代码示例:

app.on('ready',() => {
createWindow();
});

ipcMain.on('open-new-window',() => {
createWindow();
});


function createWindow() {
const window = new BrowserWindow({
width:900,
height:700,
webPreferences: {
nodeIntegration: true
}
});
window.loadUrl('index.html');
const menu = Menu.buildFromTemplate([{
label: "dev",
submenu: [{
label: "Refresh HTML",
click: () => {
window.reload();
}
}]
}]);
Menu.setApplicationMenu(menu);
}

当我从 ipcMain打开一个新窗口时,reload()函数仅在上次打开的窗口中起作用。是否在第一个窗口或第二个窗口中单击“刷新HTML”。

最佳答案

您只有一个应用程序菜单,该菜单(来自docs)

will be set as each window's top menu


因此,当您覆盖它时,这是预期的行为。比方说
  • 您将创建窗口#1。 window变量将引用#1,因此您的应用程序菜单将重新加载该代码。
  • 您将创建窗口2。 window指的是#2,单击
  • 后,您 覆盖应用程序菜单以重新加载#2
  • 单击#1的菜单仍将重新加载#2

  • 要解决此问题,您可以使用 reload 对当前窗口进行 BrowserWindow.getFocusedWindow()编码,这样您的 MenuItem的功能将不依赖于 window的引用。
    尝试
    click: () => {
    BrowserWindow.getFocusedWindow().reload();
    }

    关于javascript - 当您有多个窗口时,Electron ApplicationMenu仅适用于最后一个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64135046/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com