javascript - Electron getApplicationMenu 返回菜单,其中包含不应存在的 MenuItems

标签 javascript electron

我正在尝试制作一个 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/

相关文章:

javascript - 如何在 Firefox OS 设备上调试 javascript 文件

javascript - 如何在 JavaScript 中缩放图像(数据 URI 格式)(真正的缩放,不使用样式)

javascript - 如何等待回调

node.js - 当我使用 npm-run-all 时,如何使用 VSCode 启用 Electron Main 和 Renderer 的调试?

node.js - 我可以用 Node/Electron 停用监视器/显示器吗?

javascript - GWT java.util.Date 序列化

javascript - jQuery UI 自动完成建议在选择时未关闭

javascript - 超基本的 JavaScript 回调

macos - Electron 生成器代码签名 : bundle format unrecognized, 无效或不合适

node.js - 作为 child_process 运行主进程