【问题标题】:Electron OSX application menu - how to add custom File menu?Electron OSX 应用程序菜单 - 如何添加自定义文件菜单?
【发布时间】:2016-07-05 16:35:01
【问题描述】:

我有一个应用程序(基于杂志 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 的具有自定义文件和视图菜单操作的应用示例吗?

【问题讨论】:

    标签: macos menu electron


    【解决方案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 菜单(第一个)下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2012-09-05
      • 2011-09-21
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      相关资源
      最近更新 更多