我之前写过这个问题Stacking of Context Menus in Electron并在context menu module for electron中创建了这个问题。
尽管上面的问题非常详细,但没有得到回复。然后,@sindresorhus建议我在StackOverflow上问这个问题:
如何在电子中取消注册上下文菜单?我有一个程序,根据您点击的位置,将显示一个不同的上下文菜单:
handleContextMenu() {
this.props.contextMenu({
prepend: (params, browserWindow) => [{
label: `Summary ${this.state.msn}`,
click: () => this.createSummary()
},{
label: `Library Compare ${this.state.msn}`,
click: () => this.runLibCompare()
},{
label: `Visualize ${this.state.msn}`,
click: () => dialog.showMessageBox({
type: 'question',
buttons: this.vizButtons,
defaultId: 0,
title: `Choose your visualization`,
message: `Choose your visualization for ${this.state.msn}.`,
}, res => this.visualize(res))
}]
});
};
然而,当我右键单击另一个区域时,会弹出第一个上下文菜单,然后是第二个上下文菜单,直到当前上下文菜单出现。
我基本上想在取消后取消注册上下文菜单。我该怎么做?
更新:
摆脱了上下文菜单,只需将其输入handleContextMenu
函数:
handleContextMenu = menuItems => {
const menu = new electron.remote.Menu();
menu.append(new electron.remote.MenuItem(menuItems));
menu.popup(electron.remote.getCurrentWindow());
}
它有效!就是这样,摆脱了电子上下文菜单。
答案 0 :(得分:1)
对于没有附加模块的标准Electron Menu API,这是可能的,或许使用electron-context-menu
只会使事情变得复杂,因为这似乎是为了简化标准上下文菜单的特定用例的事情。使用标准Menu API,您可以在每次单击时创建并弹出菜单,因此无需“取消注册”菜单。
这是一个简化的示例,每次点击都会创建一个不同的新上下文菜单:
let menuCount = 1;
window.addEventListener('contextmenu', (e) => {
e.preventDefault();
let menu = new electron.remote.Menu();
menu.append(new electron.remote.MenuItem({label : "Context Menu "+menuCount++}))
menu.popup(electron.remote.getCurrentWindow());
});
在第一次右键单击时,您将看到一个菜单,其中包含“上下文菜单1”项,第二次右键单击“上下文菜单2”,依此类推。