自訂選單列
不同平台對視窗選單有不同的意義,以下討論將顯示差異並提供最佳實務,以確保視窗選單在所有平台上都能正常運作。
建立並設定選單列
若要建立選單列,您只需要在建立選單時在選項中指定 type: 'menubar'
var your_menu = new nw.Menu({ type: 'menubar' });
並確保附加到選單列的每個項目都有子選單。選單列上只有一個一般純文字選單項目在大部分平台上都沒有意義。
var submenu = new nw.Menu(); submenu.append(new nw.MenuItem({ label: 'Item A' })); submenu.append(new nw.MenuItem({ label: 'Item B' })); // the menu item appended should have a submenu your_menu.append(new nw.MenuItem({ label: 'First Menu', submenu: submenu }));
然後您可以透過設定視窗的 menu
屬性來設定視窗選單
nw.Window.get().menu = your_menu;
請參閱 Menu 和 Window 以取得 API 的詳細資料。
平台差異
Windows 和 Linux
在 Windows 和 Linux 上,選單列的行為完全相同。每個視窗可以有一個選單列,而且它們都位於標題列下方。
全螢幕/資訊亭模式中的選單列
在全螢幕或資訊亭模式中,選單列會顯示在 Windows 和 Linux 上視窗的頂端。將 win.menu
設定為 null
可以完全移除選單列。另請參閱 win.menu
。
Mac OS X
行為已變更
此功能的行為已自 0.13.0 起變更。請參閱 從 0.12 到 0.13 的移轉注意事項。
在 Mac 上,一個應用程式只能有一個選單,稱為應用程式選單,不論應用程式有多少個視窗。而且很多鍵盤快速鍵都仰賴應用程式選單的存在,例如 結束、關閉 和 複製。
預設情況下,NW.js 應用程式會以預設選單啟動,包括 您的應用程式名稱、編輯 和 視窗。您可以使用 menu.createMacBuiltin 方法取得預設選單,並依需要自訂它
var mb = new nw.Menu({type:"menubar"}); mb.createMacBuiltin("your-app-name"); // append, insert or delete items of `mb` to customize your own menu // then ... nw.Window.get().menu = mb;
修正應用程式選單的標題
應用程式選單的第一個項目顯示 nwjs,而不是 您的應用程式名稱。若要修正它,您需要將 nwjs.app/Contents/Resources/*.lproj/InfoPlist.strings
中所有檔案的 CFBundleName
值設定為 您的應用程式名稱
,而不是 nwjs
。
最佳實務
如上所述,在 Windows 和 Linux 上每個視窗都可以有一個選單列,而 Mac 上一個應用程式只能有一個應用程式選單。因此,一般來說,您應該只為您的主視窗設定選單,並避免在有多個主視窗時使用視窗選單。
而且,您可能會想要為不同的平台設計不同的選單,那麼您可以使用 process.platform 來取得您所在的平台。