代码之家  ›  专栏  ›  技术社区  ›  sbtpr

为什么打包的Electron应用程序会因菜单而失败。getApplicationMenu()在使用electron运行时返回null。没事吧?

  •  0
  • sbtpr  · 技术社区  · 6 年前

    在Windows 10上运行打包的Electron应用程序时,我遇到了一个奇怪的错误。 enter image description here

    当我在这个错误上按Ok时,应用程序将启动,但没有菜单。如果我使用 electron . 它工作得很好,有菜单。

    此处出现错误:

    var filemenu = Menu.getApplicationMenu().items[0].submenu;
    filemenu.items[0].visible = false;
    filemenu.append(new MenuItem({ label: 'Build Project', click: function () { buildProject(); } }));
    

    我正在尝试编辑默认文件菜单并添加“构建项目”项。

    这是我第一次尝试打包一个电子应用程序,所以我欢迎任何关于出错原因的反馈?

    1 回复  |  直到 6 年前
        1
  •  1
  •   sbtpr    6 年前

    在生产过程中,似乎没有将默认菜单添加到应用程序中。

    解决方案是检查您是否正在开发:

    https://www.npmjs.com/package/electron-is-dev

    // Check if we are in development
    var isDev = require('electron-is-dev');
    

    如果在生产中,您必须从头开始构建菜单。

    if(isDev){
        // In development
        // modify existing menu
    }else{
        // In production
        // construct menu from scratch
        var template = [
                {
                    label: "File",
                    submenu: [
                        {
                            label: "Exit",
                            click: function () { quit(); }
                        }
                    ]
                },
                {
                    label: "Project",
                    submenu: [
                        {
                            label: "Delete",
                            click: function () { deleteProject(); }
                        },
                        {
                            label: "Build",
                            click: function () { buildProject(); }
                        }
                    ]
                }
            ];        
        // build menu from template
        var menu = Menu.buildFromTemplate(template);    
        // set menu for main window
        mainWindow.setMenu(menu);
    };