电子菜单没有显示

时间:2017-10-16 17:52:55

标签: javascript electron

按照电子教程,无法在OS X上显示菜单。检查菜单对象是否填充了菜单项,它们不会出现在窗口或屏幕顶部。 Html文件加载就好了。

我看到的唯一菜单是(默认)应用菜单,它显示电子,但点击时没有内容,甚至没有空行 - 点击时没有任何反应。

const { app, BrowserWindow, Menu } = require("electron");
const url = require("url");
const path = require("path");

const mainWindowUrl = url.format({
    pathname: path.join(__dirname, "html", "main.html"),
    protocol: "file:",
    slashes: true,
});

const menuTemplate = [
    {
        label: "File",
    },
    {
        label: "Menu1",
    },
    {
        label: "Menu2",
    },
];

const onAppReady = () => {
    const mainWindow = new BrowserWindow({});
    mainWindow.loadURL(mainWindowUrl);

    const menu = Menu.buildFromTemplate(menuTemplate);
    Menu.setApplicationMenu(menu);
};

app.on("ready", onAppReady);

5 个答案:

答案 0 :(得分:3)

为您提供的解决方案

if (process.platform == 'darwin') {
    mainMenuTemplate.unshift({label: ''});
}

这可能会导致一些错误

if (process.platform == 'darwin'){
    mainMenuTemplate.unshift({});
}

答案 1 :(得分:2)

我认为它只是跳过你的菜单,因为它们缺少子菜单,这是你的例子的修改版本,似乎可以在我的Mac上运行:

const { app, BrowserWindow, Menu } = require("electron");
const url = require("url");
const path = require("path");

const mainWindowUrl = url.format({
    pathname: path.join(__dirname, "html", "main.html"),
    protocol: "file:",
    slashes: true
});
const menuTemplate = [
    {
        label: "File",
        submenu: [{role: 'TODO'}]
    },
    {
        label: "Menu1",
        submenu: [{role: 'TODO'}]
    },
    {
        label: "Menu2",
        submenu: [{role: 'TODO'}]
    }
];

const onAppReady = () => {
    const mainWindow = new BrowserWindow({});
    mainWindow.loadURL(mainWindowUrl);

    const menu = Menu.buildFromTemplate(menuTemplate);
    Menu.setApplicationMenu(menu);
};

app.on("ready", onAppReady);

我不知道它是否是特定于OSX的东西,但似乎至少Electron不喜欢直接触发角色的菜单,而是必须显示可以触发某些动作的子菜单。

答案 2 :(得分:2)

我注意到在OS X上菜单模板中的第一个菜单项是'文件'在您的情况下,可以在默认的电子菜单下找到,因此您可能希望在数组中添加一个空项

const mainMenuTemplate = [
    {},
    {
        label: 'File',
        submenu: [
            {
                label: 'Add Item'
            },
            {
                label: 'Clear items'
            },
            {
                label: 'Quit',
                click(){
                    app.quit();
                }
            }
        ]
    }
 ];

答案 3 :(得分:1)

这是为了修复导航为macosx所需的空间

enter code here

//if mac add empty object to menuTemplate
if(process.platform=='darwin'){
  mainMenuTemplate.unshift({});//adding it to the beggining of the array
}

答案 4 :(得分:0)

我添加了一个带有角色的空菜单。

const mainMenuTemplate = [
{
  label: "",
  role: 'TODO'
},

{
    label: "File",

    submenu: [
      {
        label: 'Add Item',
      },
      {
      label: 'Clear Items'
      }
    ]
}

];