菜单

Menu 表示菜单栏或上下文菜单. 由MenuItem 菜单项组成.

示例

创建上下文菜单的例子:

  1. // 创建一个空的上下文菜单
  2. var menu = new nw.Menu();
  3. // 添加一些项目
  4. menu.append(new nw.MenuItem({ label: '菜单项 A' }));
  5. menu.append(new nw.MenuItem({ label: '菜单项 B' }));
  6. menu.append(new nw.MenuItem({ type: 'separator' }));
  7. menu.append(new nw.MenuItem({ label: '菜单项 C' }));
  8. // 删除一个项目
  9. menu.removeAt(1);
  10. // 弹出窗口作为上下文菜单
  11. menu.popup(10, 10);
  12. // 迭代菜单项
  13. for (var i = 0; i < menu.items.length; ++i) {
  14. console.log(menu.items[i]);
  15. }

想要创建菜单栏,您必须创建一个2级菜单并将其分配给win.menu.以下是创建菜单栏的示例:

  1. // 创建一个空的菜单栏
  2. var menu = new nw.Menu({type: 'menubar'});
  3. // 创建一个子菜单作为第二级菜单
  4. var submenu = new nw.Menu();
  5. submenu.append(new nw.MenuItem({ label: '菜单项 A' }));
  6. submenu.append(new nw.MenuItem({ label: '菜单项 B' }));
  7. // 创建并附加一级菜单到菜单栏
  8. menu.append(new nw.MenuItem({
  9. label: '第一个菜单',
  10. submenu: submenu
  11. }));
  12. // 分配至`window.menu`并显示菜单
  13. nw.Window.get().menu = menu;

更多细节,请参阅 自定义菜单栏

由于页面中创建的菜单(如右键菜单)在关闭窗口或导航后会被当成垃圾回收而消失不见,因此,请在 后台页面中使用菜单,该页面存在于应用的整个生命周期中.关于如何在后台页面中执行脚本,请参考bg-scriptmain章节.

new Menu([option])

用途:创建新的菜单

  • option Object - (可选)
    • type String - (可选) 可选类型: menubar, contextmenu ,默认 contextmenu

menu.items

用途:获取由全部菜单项组成的数组

有关 MenuItem菜单项内容,请参阅 MenuItem

menu.append(item)

用途:在菜单尾部追加新的菜单项 item

  • item MenuItem - 追加到菜单尾部的菜单项

menu.insert(item, i)

用途:在菜单指定索引位置插入新的菜单项 item

  • item MenuItem - 要插入的菜单项
  • i Integer - 在菜单中的位置索引,索引以 0开始

menu.remove(item)

用途:从菜单中移除指定 item的菜单项

  • item MenuItem - 要移除的菜单项

menu.removeAt(i)

用途:从菜单中移除指定索引 i的菜单项 item

  • i Integer - 要移除的菜单项的位置索引

menu.popup(x, y)

用途:在指定锚点(x,y)弹出 contextmenu类型的上下文菜单

  • x Integer - 锚点的x位置
  • y Integer - 锚点的y位置

通常,你要监听 contextmenu 并手动弹出菜单:

  1. document.body.addEventListener('contextmenu', function(ev) {
  2. ev.preventDefault();
  3. menu.popup(ev.x, ev.y);
  4. return false;
  5. });

这个方法可以精确的按需显示不同样式的菜单,而且弹出前还可以对菜单进行更新.

menu.createMacBuiltin(appname, [options]) Mac

用途:在Mac上的菜单栏中创建内置菜单如(App, EditWindow)

  • appname String - 应用名,该名称将显示为 App菜单标题
  • options Object - (可选)
    • hideEdit Boolean - (可选) 不填充编辑菜单
    • hideWindow Boolean - (可选) d不填充窗口菜单

更多细节,请参阅 自定义菜单栏