如何使用 accelerator
在上下文菜单中调用 menu item
?
var menu = new Menu();
menu.append(new MenuItem({
label: 'Say something',
click: function(){
alert("Hello");
},
accelerator: "CmdOrCtrl+E"
}));
window.addEventListener('contextmenu', function (e) {
e.preventDefault();
menu.popup(currentWindow);
}, false);
上面的代码有效。出现上下文菜单,当单击菜单项时,单击回调起作用。
但是加速器命令不起作用。有任何想法吗?
侧面问题:
我可以将
click event
传递给 menu.popup
然后将它传递给 menu-item
click
callback
吗?现在我只是将点击事件存储在一个全局变量中。 最佳答案
我不相信 Electron 会注册一个加速器,除非你调用 Menu.setApplicationMenu(menu)
或等价物。在您的代码段中,您创建了一个菜单,但在调用 popup 方法之前,您并没有真正对它做任何事情。在您注册加速器之前,Electon 如何知道您想使用加速器?这些在设置到应用程序菜单时注册。
也就是说,Electron 似乎没有提供一种简单的方法来注册本地的、仅渲染器进程的快捷方式,而无需创建 BrowserWindow 菜单。您可以在本期阅读更多相关信息:https://github.com/atom/electron/issues/1334 换句话说,在 OSX 中,加速器由 OS 的菜单系统而不是 Electron 处理,因此为这些没有菜单的本地化快捷方式添加跨平台支持需要对 OSX 版本进行大量工作.
建议的解决方案是在 JavaScript 中捕获您想要的快捷方式,然后以这种方式触发命令。您仍然可以使用加速器选项来表示上下文菜单中的组合键。