2017-10-16 121 views
1

遵循電子教程,無法在OS X上顯示菜單。檢查菜單項是否填充菜單項,它們只是不出現在窗口中或頂部的屏幕。 Html文件加載得很好。電子菜單不顯示

我看到的唯一菜單是讀取Electron的(默認)應用程序菜單,但點擊時沒有內容,甚至沒有空行 - 點擊時沒有任何反應。

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

回答

1

我認爲它只是跳過你的菜單,因爲他們缺乏的子菜單,在這裏,似乎我的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不喜歡直接觸發角色的菜單,而是他們必須揭示子菜單,然後觸發某些操作。

+0

謝謝!沒有看到任何你需要任何其他內容來製作有效的菜單。雖然有意義。我可能只是錯過了它。 :-) –

0

我注意到,在OS X中的菜單模板是「文件」在你的情況下,第一個菜單項是默認的電子菜單下找到,因此你可能希望將數組中添加一個空的項目

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