我正在尝试制作一个 Electron 菜单,我已经将其设置如下:
const template = [{
label: 'File',
submenu: [{
label: 'Save',
click() {
console.log('TODO save');
}
}, {
label: 'Preferences',
click() {
console.log('TODO preferences');
}
}]
}, {
label: 'Edit',
submenu: [{
role: 'undo'
}, {
role: 'redo'
}, {
type: 'separator'
},...]
}, {
label: 'View',
submenu: [{
role: 'reload'
}, {
role: 'forcereload'
},...]
}, {
label: 'Insert',
submenu: [{
label: 'Testing',
enabled: false,
click() {
win.webContents.send('insert-clicked');
}
}...]
}
];
console.log(template);
menu = Menu.buildFromTemplate(template);
win.setMenu(menu);
console.log(Menu.getApplicationMenu()); //something with 'window' and 'help'
console.log(menu.getApplicationMenu()); //error
第一个console.log(template)
按预期记录模板。菜单也按实际应用程序中的预期显示。但是当我 console.log(Menu.getApplicationMenu())
我得到以下信息:
Menu {
commandsMap:
{ '2':
MenuItem {
label: 'File',
submenu: [Object],
type: 'submenu',
role: null,
accelerator: null,
icon: null,
sublabel: '',
enabled: true,
visible: true,
checked: false,
commandId: 2,
click: [Function],
menu: [Circular] },
'12':
MenuItem {
label: 'Edit',
submenu: [Object],
type: 'submenu',
role: null,
accelerator: null,
icon: null,
sublabel: '',
enabled: true,
visible: true,
checked: false,
commandId: 12,
click: [Function],
menu: [Circular] },
'22':
MenuItem {
label: 'View',
submenu: [Object],
type: 'submenu',
role: null,
accelerator: null,
icon: null,
sublabel: '',
enabled: true,
visible: true,
checked: false,
commandId: 22,
click: [Function],
menu: [Circular] },
'25':
MenuItem {
role: 'window',
submenu: [Object],
type: 'submenu',
accelerator: null,
icon: null,
label: 'Window',
sublabel: '',
enabled: true,
visible: true,
checked: false,
commandId: 25,
click: [Function],
menu: [Circular] },
'30':
MenuItem {
role: 'help',
submenu: [Object],
type: 'submenu',
accelerator: null,
icon: null,
label: 'Help',
sublabel: '',
enabled: true,
visible: true,
checked: false,
commandId: 30,
click: [Function],
menu: [Circular] } },
groupsMap: {},
items:
[ MenuItem {
label: 'File',
submenu: [Object],
type: 'submenu',
role: null,
accelerator: null,
icon: null,
sublabel: '',
enabled: true,
visible: true,
checked: false,
commandId: 2,
click: [Function],
menu: [Circular] },
MenuItem {
label: 'Edit',
submenu: [Object],
type: 'submenu',
role: null,
accelerator: null,
icon: null,
sublabel: '',
enabled: true,
visible: true,
checked: false,
commandId: 12,
click: [Function],
menu: [Circular] },
MenuItem {
label: 'View',
submenu: [Object],
type: 'submenu',
role: null,
accelerator: null,
icon: null,
sublabel: '',
enabled: true,
visible: true,
checked: false,
commandId: 22,
click: [Function],
menu: [Circular] },
MenuItem {
role: 'window',
submenu: [Object],
type: 'submenu',
accelerator: null,
icon: null,
label: 'Window',
sublabel: '',
enabled: true,
visible: true,
checked: false,
commandId: 25,
click: [Function],
menu: [Circular] },
MenuItem {
role: 'help',
submenu: [Object],
type: 'submenu',
accelerator: null,
icon: null,
label: 'Help',
sublabel: '',
enabled: true,
visible: true,
checked: false,
commandId: 30,
click: [Function],
menu: [Circular] } ],
delegate:
{ isCommandIdChecked: [Function: isCommandIdChecked],
isCommandIdEnabled: [Function: isCommandIdEnabled],
isCommandIdVisible: [Function: isCommandIdVisible],
getAcceleratorForCommandId: [Function: getAcceleratorForCommandId],
getIconForCommandId: [Function: getIconForCommandId],
executeCommand: [Function: executeCommand],
menuWillShow: [Function: menuWillShow] } }
其中有“窗口”和“帮助”菜单项!我真的不明白我应该如何使用该方法; docs说出来
Returns Menu | null - The application menu, if set, or null, if not set.
但我一定错过了一些明显的东西?
console.log(menu.getApplicationMenu())
给我TypeError: menu.getApplicationMenu is not a function
最佳答案
您正在调用 Menu.getApplicationMenu()
,但您从未调用 Menu.setApplicationMenu(menu)
,它设置整个应用程序的菜单。
相反,您正在调用 win.setMenu(menu)
,它为特定窗口设置菜单,但这似乎不是您想要的。
关于javascript - Electron getApplicationMenu 返回菜单,其中包含不应存在的 MenuItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49759857/