如何在渲染器中处理来自应用程序菜单的事件

How to process events from the application menu in the renderer

当用户select菜单选项

时,电子应用程序的主进程接收事件
    const menu = {
        label: 'Foo',
        submenu: [
            {
                label: 'Bar',
                click: () => {
                    // execute function in render process
                },
            },
        ]
    });

    Menu.setApplicationMenu(Menu.buildFromTemplate(menu));  

这应该在渲染过程中执行一个函数。

如何拦截渲染进程中的菜单事件或从主进程执行渲染进程中的函数?

您可以在单击菜单项时向渲染器发送消息,然后在渲染器收到消息后执行您想要的操作。

本次通讯名为IPC, Inter Process Communication

菜单项如下所示:

{
    label: 'Bar',
    click: () => {
        win.webContents.send('menuItemClicked', 'Clicked!');
    },
},

然后将此代码添加到您的渲染器中:

var ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.on('menuItemClicked', function (evt, message)
{
    console.log(message); // Outputs: Clicked!
    
    // Do your renderer stuff here.
});

瞧!