Electron 电子菜单加速器不工作

Electron 电子菜单加速器不工作,electron,Electron,我正在学习Pluralsight的电子基础课程(Trent,2016)。我无法让加速器处理我的“退出”菜单项。下面是我的整个main.js文件。根据我所知(下图),菜单创建成功,直接单击退出菜单项确实会关闭应用程序,但Alt+W组合键不会。我在Windows10上。我错过了什么 看起来在Windows上,它需要在浏览器窗口上加载一些内容。放置loadURL使其工作。但是需要尝试除加载URL之外的其他内容 app.on('ready', _ => { mainWindow = ne

我正在学习Pluralsight的电子基础课程(Trent,2016)。我无法让加速器处理我的“退出”菜单项。下面是我的整个main.js文件。根据我所知(下图),菜单创建成功,直接单击退出菜单项确实会关闭应用程序,但Alt+W组合键不会。我在Windows10上。我错过了什么


看起来在Windows上,它需要在
浏览器窗口
上加载一些内容。放置
loadURL
使其工作。但是需要尝试除加载URL之外的其他内容

app.on('ready', _ => {
    mainWindow = new BrowserWindow()

    mainWindow.loadURL('https://github.com')

   const name = electron.app.getName()

    const template = [
        {
            label: name,
            submenu: [{
                label: `About ${name}` ,
                click: console.log('clicked!')
            },{
                type:'separator'
            },{
                label:'Quit',
                click: _ =>{
                    app.quit()                    
                },
                accelerator:'CmdOrCtrl+Q'
            }
            ]
        }        
    ]

    const menu = Menu.buildFromTemplate(template)
    Menu.setApplicationMenu(menu)
     })

不再支持
加速器
字符串。文档已在中更新,以阐明如何使用
globalShortcut
定义快捷方式

:快捷方式使用注册方法注册到globalShortcut模块,即

   const {app, globalShortcut} = require('electron')

   app.on('ready', () => {
     // Register a 'CommandOrControl+Y' shortcut listener.
     globalShortcut.register('CommandOrControl+Y', () => {
       // Do stuff when Y and either Command/Control is pressed.
     })
   })
因此请将代码更改为此

const electron = require('electron');

const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const Menu = electron.Menu;
const globalShortcut = electron.globalShortcut;

app.on('ready', _ => {
    new BrowserWindow();

    // Declare shortcuts
    globalShortcut.register('Alt+W', () => app.quit());

    const template = [
    {
        label: "File",
        submenu: [{
            label: 'About',
            click: _ => {
                console.log('clicked');
            }
        },
        {
            type: 'separator'
        },
        {
            label: 'Quit',
            click: _ => {
                app.quit();
            }
        }]
    }];

    const menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);
});

不再需要
意味着仍然可以使用旧方法,而且它还意味着,您不再能够将一个函数与两种不同的调用方法相关联,这是一件好事。@Michael good catch!编辑以澄清它不再受支持。请注意,globalShortcut不能替代菜单快捷方式(仅影响聚焦窗口)。它将在操作系统级别安装一个全局快捷方式(也就是说,将阻止任何其他应用程序使用该快捷方式)。详情如下:
const electron = require('electron');

const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const Menu = electron.Menu;
const globalShortcut = electron.globalShortcut;

app.on('ready', _ => {
    new BrowserWindow();

    // Declare shortcuts
    globalShortcut.register('Alt+W', () => app.quit());

    const template = [
    {
        label: "File",
        submenu: [{
            label: 'About',
            click: _ => {
                console.log('clicked');
            }
        },
        {
            type: 'separator'
        },
        {
            label: 'Quit',
            click: _ => {
                app.quit();
            }
        }]
    }];

    const menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);
});