Javascript 如何为electron中的特定窗口创建单独的菜单?
我正在Windows上创建一个关于此应用程序窗口,我想为我的“关于”窗口创建一个自定义菜单栏。既然我已经有了一个自定义菜单,有没有一种方法可以创建另一个菜单并将其仅应用于该特定窗口 旁注: 这是我为新窗口编写的代码,它应该阻止它被调整并进入全屏,但由于某些原因,最小化和放大按钮仍然有效Javascript 如何为electron中的特定窗口创建单独的菜单?,javascript,windows,electron,menubar,titlebar,Javascript,Windows,Electron,Menubar,Titlebar,我正在Windows上创建一个关于此应用程序窗口,我想为我的“关于”窗口创建一个自定义菜单栏。既然我已经有了一个自定义菜单,有没有一种方法可以创建另一个菜单并将其仅应用于该特定窗口 旁注: 这是我为新窗口编写的代码,它应该阻止它被调整并进入全屏,但由于某些原因,最小化和放大按钮仍然有效 app.on('ready', createWindow); electron.app.on('ready', () => { //Triger update check if (!isDev) {
app.on('ready', createWindow);
electron.app.on('ready', () => {
//Triger update check
if (!isDev) {
autoUpdater.checkForUpdates();
}
})
function createWindow(){
//create brower window
win = new BrowserWindow({
backgroundColor: '#2e2c29',
width: 800,
height: 600,
//transparent: true,
frame: false,
titleBarStyle: 'hidden',
backgroundColor: '#0000',
webPreferences: {
nodeIntegration: true
}
});
//Quit when all windows are closed
app.on('window-all-closed', () => {
app.quit()
})
app.once('ready', function() {
const template = [
{
label: 'File',
submenu: [
{
label: 'About Hubris',
click: () =>
openAboutWindow()
},
{ type: 'separator' },
{ role: 'hide' },
{ role: 'hideothers' },
{ role: 'unhide' },
{ type: 'separator' },
{ role: 'quit' }
]
},
{
label: 'View',
submenu: [
{ role: 'minimize' },
{ role: 'zoom' },
{ type: 'separator' },
{ role: 'togglefullscreen' }
]
},
]
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
//here is the code for the about window
var newWindow = null
function openAboutWindow() {
if (newWindow) {
newWindow.focus()
return
}
newWindow = new BrowserWindow({
height: 439,
resizable: false,
width: 599,
title: 'About Hubris',
minimizable: false,
fullscreenable: false,
frame: false,
titleBarStyle: 'hidden',
})
newWindow.loadURL('file://' + __dirname + '/about-this-app.html')
newWindow.on('closed', function() {
newWindow = null
})
}
});
为此,您必须在main.js文件的顶部从electron导入菜单:
// From
const {app, BrowserWindow} = require('electron')
// To
const {app, BrowserWindow, Menu} = require('electron').
然后,在createWindow()函数的底部附近添加:
function createWindow () {
// some code here removed for brevity
var menu = Menu.buildFromTemplate([
{
label: 'Menu',
submenu: [
{label:'Adjust Notification Value'},
{label:'CoinMarketCap'},
{label:'Exit'}
]
}
])
Menu.setApplicationMenu(menu);
}
接下来,我们将引用Menu.buildFromTemplate([{}]),它是在一系列数组和对象中实际定义和构建菜单的地方
“标签”代表您希望菜单显示的名称,因此请放入您喜欢的内容
“子菜单”属性是一个对象数组,每个对象定义单击标签时显示的实际菜单项
最后,使用.setApplicationMenu设置菜单。如果您保存项目,并在控制台中运行npm start,您将看到显示其项目(数组)的菜单,但如果单击它们,则不会发生任何事情。
您可以通过返回main.js来更改此设置,添加以下代码以使退出按钮关闭应用程序:
var menu = Menu.buildFromTemplate([
{
label: 'Menu',
submenu: [
{label:'Adjust Notification Value'},
{label:'CoinMarketCap'},
{
label:'Exit',
click() {
app.quit()
}
}
]
}
])
因此,为了使菜单项可单击,我们只需在标签值后添加一个逗号,并引用“click(){}”
在本例中,我们在单击退出子菜单项时调用app.quit()。请在控制台中运行npm start并单击退出,尝试一下。
就是这样!你可以动态切换菜单。我有一个带有“编辑”和“演示”模式的应用程序。我为每个模式创建并存储一个菜单(它们有不同的菜单项): 并订阅相关的窗口事件(焦点、模糊等)。然后当窗口获得焦点时
Menu.setApplicationMenu(editorMenu);
抱歉,我想我不清楚。我添加代码是为了向您展示。现在我已经有了一个自定义菜单,但我想为“关于”窗口提供另一个自定义菜单。我知道您在说什么,但我不确定如何做。我对electron真的很陌生(3天)。做一个测试项目;在
main.js
中,创建两个窗口,两个由不同模板构建的菜单,播放各种窗口事件。将“关于窗口”留待以后使用。即
Menu.setApplicationMenu(editorMenu);