菜单

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

示例

创建上下文菜单的例子:

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

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

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

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

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

new Menu([option])

用途:创建新的菜单

menu.items

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

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

menu.append(item)

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

menu.insert(item, i)

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

menu.remove(item)

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

menu.removeAt(i)

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

menu.popup(x, y)

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

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

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

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

menu.createMacBuiltin(appname, [options]) Mac

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

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