Javascript Electron getApplicationMenu返回菜单,菜单项不应';不存在
我试图制作一个电子菜单,我将其设置为:Javascript Electron getApplicationMenu返回菜单,菜单项不应';不存在,javascript,electron,Javascript,Electron,我试图制作一个电子菜单,我将其设置为: const template = [{ label: 'File', submenu: [{ label: 'Save', click() { console.log('TODO save'); } }, { label: 'Preferences', cli
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(模板)
按预期记录模板。菜单也会在实际应用程序中按预期显示。但是当我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] } }
其中有“窗口”和“帮助”菜单项!我真的不明白我该如何使用这种方法;他们说吧
返回菜单| null-应用程序菜单(如果设置),或null(如果未设置)
但我肯定错过了一些明显的东西
console.log(menu.getApplicationMenu())
向我提供了TypeError:menu.getApplicationMenu不是一个函数
您正在调用menu.getApplicationMenu()
,但您从未调用过,它为整个应用程序设置了菜单
相反,您调用的是
win.setMenu(menu)
,它为特定窗口设置菜单,而该窗口似乎不是您想要的。您调用的是menu.getApplicationMenu()
,但您从不调用,它为整个应用程序设置菜单
相反,您正在调用
win.setMenu(menu)
,它为特定窗口设置菜单,而该窗口似乎不是您想要的。您不想先调用吗?@pushkin是另一种方法吗!?我一直在使用setMenu,我想就是它console.log(menu.getApplicationMenu())//错误
会导致错误,因为getApplicationMenu
是静态成员,而不是实例成员我需要做一些研究,但它们是两种不同的方法。vs。我猜后者会为特定的窗口设置菜单。也许前者将菜单应用于所有窗口。因此,您要使用的菜单取决于您想要的行为。您不想先调用吗?@pushkin是另一种方法吗!?我一直在使用setMenu,我想就是它console.log(menu.getApplicationMenu())//错误
会导致错误,因为getApplicationMenu
是静态成员,而不是实例成员我需要做一些研究,但它们是两种不同的方法。vs。我猜后者会为特定的窗口设置菜单。也许前者将菜单应用于所有窗口。因此,您想要使用的菜单取决于您想要的行为。