Electron OSX应用程序菜单 - 如何添加自定义文件菜单?

时间:2016-07-05 16:35:01

标签: macos menu electron

我有一个应用程序(基于杂志tute),其菜单在Windows和Ubuntu上运行良好,但我无法在MacOS上显示应用程序级自定义菜单项。这些菜单项是文件和视图条目。

我仔细阅读了电子API文档,我看到了OSX的特殊注意事项,特别是关于"角色"属性,但我仍然在这里受阻。我能够在OSX上为API文档中列出的事物类型创建菜单项(例如"编辑"使用角色的菜单项,来自渲染器脚本),但不能为我的应用程序创建。

我的菜单项是否会与保留的"文件/视图" mac菜单中的菜单项名称?

这里是我的菜单模板字符串:

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?

1 个答案:

答案 0 :(得分:1)

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));
}

如果您使用"文件"菜单,它将被放置在macOS上的YourAppName菜单(第一个)下。