Electron OSX 应用程序菜单 - 如何添加自定义文件菜单?
Electron OSX application menu - how to add custom File menu?
我有一个应用程序(基于杂志教程),其菜单在 Windows 和 Ubuntu 上运行良好,但我无法在 Mac 上显示应用程序级别的自定义菜单项OS。这些菜单项是文件和视图条目。
我仔细研究了 electron API 文档,我看到了 OSX 的特殊注意事项,尤其是关于 "role" 属性,但我仍然在这里受阻。我可以在 OSX 上为 API 文档中列出的内容类型创建菜单项(例如 "Edit" 使用角色的菜单项,来自渲染器脚本)但不能为我的应用程序。
我的菜单项是否会与 mac 菜单中保留的 "File/View" 菜单项名称冲突?
这是我的菜单模板字符串的片段:
var SendEvent = function(name) {
return function() {win.webContents.send(name);};
};
var template = [
{label: 'File', submenu: [
{label: 'New', click: SendEvent('file-new')},
{label: 'Open', click: OpenFile},
{label: 'Save', click: SendEvent('file-save')},
{label: 'Save As', click: SendEvent('file-save-as')},
{label: 'Close', click: SendEvent('file-close')},
{type: 'separator'},
{label: 'Quit', click: function() {app.quit();}}
]}, {label: 'View', submenu: [
{label: 'HTML/Markdown', click: SendEvent('view-toggle')}
]}
];
Menu.setApplicationMenu(Menu.buildFromTemplate(template));
是否有任何其他应用程序示例,这些应用程序具有适用于 macOS 的自定义文件和视图菜单操作?
Menu.setApplicationMenu(Menu.buildFromTemplate(template));
应该在 createWindow()
函数中调用:
function createWindow() {
mainWindow = new BrowserWindow({
width: 800,
height: 600
})
mainWindow.loadURL(url.format({
pathname: path.join(__dirname, "index_menus.html"),
protocol: "file:",
slashes: true
}))
mainWindow.on("closed", () => {
mainWindow = null;
});
var template = [
{label: 'File', submenu: [
{label: 'New', click: SendEvent('file-new')},
{label: 'Open', click: SendEvent('file-open')},
{label: 'Save', click: SendEvent('file-save')},
{label: 'Save As', click: SendEvent('file-save-as')},
{label: 'Close', click: SendEvent('file-close')},
{type: 'separator'},
{label: 'Quit', click: function() {app.quit();}}
]},
{label: 'View', submenu: [
{label: 'HTML/Markdown', click: SendEvent('view-toggle')}
]}
];
Menu.setApplicationMenu(Menu.buildFromTemplate(template));
}
如果您使用 "File" 菜单,它将被放置在 macOS 上的 YourAppName 菜单(第一个)下。
我有一个应用程序(基于杂志教程),其菜单在 Windows 和 Ubuntu 上运行良好,但我无法在 Mac 上显示应用程序级别的自定义菜单项OS。这些菜单项是文件和视图条目。
我仔细研究了 electron API 文档,我看到了 OSX 的特殊注意事项,尤其是关于 "role" 属性,但我仍然在这里受阻。我可以在 OSX 上为 API 文档中列出的内容类型创建菜单项(例如 "Edit" 使用角色的菜单项,来自渲染器脚本)但不能为我的应用程序。
我的菜单项是否会与 mac 菜单中保留的 "File/View" 菜单项名称冲突?
这是我的菜单模板字符串的片段:
var SendEvent = function(name) {
return function() {win.webContents.send(name);};
};
var template = [
{label: 'File', submenu: [
{label: 'New', click: SendEvent('file-new')},
{label: 'Open', click: OpenFile},
{label: 'Save', click: SendEvent('file-save')},
{label: 'Save As', click: SendEvent('file-save-as')},
{label: 'Close', click: SendEvent('file-close')},
{type: 'separator'},
{label: 'Quit', click: function() {app.quit();}}
]}, {label: 'View', submenu: [
{label: 'HTML/Markdown', click: SendEvent('view-toggle')}
]}
];
Menu.setApplicationMenu(Menu.buildFromTemplate(template));
是否有任何其他应用程序示例,这些应用程序具有适用于 macOS 的自定义文件和视图菜单操作?
Menu.setApplicationMenu(Menu.buildFromTemplate(template));
应该在 createWindow()
函数中调用:
function createWindow() {
mainWindow = new BrowserWindow({
width: 800,
height: 600
})
mainWindow.loadURL(url.format({
pathname: path.join(__dirname, "index_menus.html"),
protocol: "file:",
slashes: true
}))
mainWindow.on("closed", () => {
mainWindow = null;
});
var template = [
{label: 'File', submenu: [
{label: 'New', click: SendEvent('file-new')},
{label: 'Open', click: SendEvent('file-open')},
{label: 'Save', click: SendEvent('file-save')},
{label: 'Save As', click: SendEvent('file-save-as')},
{label: 'Close', click: SendEvent('file-close')},
{type: 'separator'},
{label: 'Quit', click: function() {app.quit();}}
]},
{label: 'View', submenu: [
{label: 'HTML/Markdown', click: SendEvent('view-toggle')}
]}
];
Menu.setApplicationMenu(Menu.buildFromTemplate(template));
}
如果您使用 "File" 菜单,它将被放置在 macOS 上的 YourAppName 菜单(第一个)下。