第一个菜单名称在Electron js中被覆盖

8oomwypt  于 2022-12-08  发布在  Electron
关注(0)|答案(1)|浏览(207)

我试图用electronjs编写一个简单的菜单,我注意到第一个菜单的名称与我编写的不同。
这是我的主要.js:

const electron = require('electron')
const url = require('url')
const path = require('path')

const {app, BrowserWindow, Menu} = electron;

let mainWindow;

const mainMenuTemplate = [
    {
        label:'File',
        submenu: [
            {
                label: 'Custom Undo',
                role: 'undo'
            },
         ]
    },
    {
        label:'View',
        submenu: [
            {
               role: 'reload'
            },
        ]
    }
];

// Build menu from template
const menu = Menu.buildFromTemplate(mainMenuTemplate);

// Insert 
Menu.setApplicationMenu(menu);

// Listen
app.on('ready', function(){

    // main window
    mainWindow = new BrowserWindow({width: 800, height: 600});

    // load html into
    mainWindow.loadURL(url.format ({
        pathname: path.join(__dirname, 'mainWindow.html'),
        protocol: 'file:',
        slashes: true
     }))
})

这是应用程序的视图;请注意,第一个项目命名为Electron,而不是File。x1c 0d1x
第二个菜单项View就可以了,知道为什么会发生这种情况吗?

mlmc2os5

mlmc2os51#

在macOS上,应用程序菜单中的第一个菜单项总是以应用程序本身(源代码)命名。您可能应该允许第一个菜单项与macOS上的惯例相同,然后是文件菜单。
要做到这一点,同时也要跨平台工作,您可以沿着以下思路进行操作:

const { app, Menu } = require('electron')

const isMac = process.platform === 'darwin'

const mainMenuTemplate = [
    ...(isMac ? [{
        label: app.name,
        submenu: [
            { role: 'about' },
            { type: 'separator' },
            { role: 'services' },
            { type: 'separator' },
            { role: 'hide' },
            { role: 'hideOthers' },
            { role: 'unhide' },
            { type: 'separator' },
            { role: 'quit' }
        ]
    }] : []),
    {
        label:'File',
        submenu: [
            {
                label: 'Custom Undo',
                role: 'undo'
            },
         ]
    },
    {
        label:'View',
        submenu: [
            {
               role: 'reload'
            },
        ]
    }
];

代码改编自电子文档和OP代码中的示例代码。
根据操作系统的不同,菜单将包含3个顶级对象(macOS)或2个顶级对象(非macOS)。

相关问题