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。我猜后者会为特定的窗口设置菜单。也许前者将菜单应用于所有窗口。因此,您想要使用的菜单取决于您想要的行为。