按照电子教程,无法在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);
答案 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'
}
]
}
];