环境:
Electron文档指示菜单实例上有两个事件:
但是,文档未指出如何在菜单实例上为事件注册侦听器。
在我的主应用程序菜单上(通过Menu.buildFromTemplate实例化,以及 设置为Menu.setApplicationMenu),我已经尝试了从buildFromTemplate返回的菜单实例的以下变化:
它们都没有触发。
文档说某些事件在指定的某些操作系统上不起作用,但是事件文档中没有其他信息表明linux不起作用。
目的是在显示菜单之前检查并设置菜单项状态。
我可以用其他方式蛮力设置项目状态,但如果可能的话,宁愿使用这种机制。
最终,我将在Windows和OSX上进行尝试,但在Linux上却没有发生。
答案 0 :(得分:0)
以编程方式调用menu.popup()
时将触发此事件:
在调用menu.popup()时发出。
来源:https://electronjs.org/docs/api/menu#event-menu-will-show
这是一个例子:
这是我的主线。它创建一个菜单并每秒钟调用menu.popup
。所以我应该在控制台中看到。
const {app, BrowserWindow, Menu} = require('electron');
const url = require('url');
const path = require('path');
app.on('ready', () => {
const menu = Menu.buildFromTemplate([
{
role: 'help',
submenu: [
{label: 'Order a burrito'}
]
}
]);
Menu.setApplicationMenu(menu);
menu.addListener('menu-will-show', () => {
console.log('');
});
const mainWindow = new BrowserWindow({width: 800, height: 600});
mainWindow.loadURL(
url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
})
);
setInterval(()=> {
menu.popup({window: mainWindow});
}, 1000);
});
正如您在此截屏视频中所看到的,menu.popup()
调用使上下文菜单出现,该菜单又将墨西哥卷饼打印到控制台: