美文网首页
Electron自定义菜单

Electron自定义菜单

作者: 李颖轩_LiYingxuan | 来源:发表于2017-11-28 19:49 被阅读1154次

    直接粘main.js的代码吧,其中正常部分去掉了中文注释,有中文部分就是菜单相关部分,基本就是最下面的一堆。

    const electron = require('electron')
    const app = electron.app
    const BrowserWindow = electron.BrowserWindow
    const Menu = electron.Menu
    const path = require('path')
    if (process.mas) app.setName('Your Electron App Name')
    
    let mainWindow
    
    function createWindow () {
      let windowOptions = {
        width: 1220,
        height: 780,
        minWidth: 1220,
        minHeight: 780,
        title: app.getName()
      }
    
      if (process.platform === 'linux') {
        windowOptions.icon = path.join(__dirname, '/app/ico/your-ico.png')
      }
    
      mainWindow = new BrowserWindow(windowOptions);
      mainWindow.loadURL(path.join('file://', __dirname, '/index.html'))
    
      mainWindow.on('closed', function () {
        mainWindow = null
      })
    }
    
    app.on('ready', function() {
      const menu = Menu.buildFromTemplate(template)
      Menu.setApplicationMenu(menu) // 设置菜单部分
      createWindow()
    })
    
    app.on('window-all-closed', function () {
      if (process.platform !== 'darwin') app.quit()
    })
    
    app.on('activate', function () {
      if (mainWindow === null) createWindow()
    })
    
    app.on('browser-window-created', function () {
        let reopenMenuItem = findReopenMenuItem()
        if (reopenMenuItem) reopenMenuItem.enabled = false
    })
    
    app.on('window-all-closed', function () {
        let reopenMenuItem = findReopenMenuItem()
        if (reopenMenuItem) reopenMenuItem.enabled = true
        app.quit()
    })
    
    
    /**
     * 注册键盘快捷键
     * 其中:label: '切换开发者工具',这个可以在发布时注释掉
     */
    let template = [
        {
            label: 'Edit ( 操作 )',
            submenu: [{
                label: 'Copy ( 复制 )',
                accelerator: 'CmdOrCtrl+C',
                role: 'copy'
            }, {
                label: 'Paste ( 粘贴 )',
                accelerator: 'CmdOrCtrl+V',
                role: 'paste'
            }, {
                label: 'Reload ( 重新加载 )',
                accelerator: 'CmdOrCtrl+R',
                click: function (item, focusedWindow) {
                    if (focusedWindow) {
                        // on reload, start fresh and close any old
                        // open secondary windows
                        if (focusedWindow.id === 1) {
                            BrowserWindow.getAllWindows().forEach(function (win) {
                                if (win.id > 1) {
                                    win.close()
                                }
                            })
                        }
                        focusedWindow.reload()
                    }
                }
            }]
        },
        {
            label: 'Window ( 窗口 )',
            role: 'window',
            submenu: [{
                label: 'Minimize ( 最小化 )',
                accelerator: 'CmdOrCtrl+M',
                role: 'minimize'
            }, {
                label: 'Close ( 关闭 )',
                accelerator: 'CmdOrCtrl+W',
                role: 'close'
            }, {
              label: '切换开发者工具',
              accelerator: (function () {
                if (process.platform === 'darwin') {
                  return 'Alt+Command+I'
                } else {
                  return 'Ctrl+Shift+I'
                }
              })(),
              click: function (item, focusedWindow) {
                if (focusedWindow) {
                  focusedWindow.toggleDevTools()
                }
              }
            },{
                type: 'separator'
            }]
        },
      {
            label: 'Help ( 帮助 ) ',
            role: 'help',
            submenu: [{
                label: 'FeedBack ( 意见反馈 )',
                click: function () {
                    electron.shell.openExternal('https://forum.iptchain.net')
                }
            }]
        }
    ]
    
    /**
     * 增加更新相关的菜单选项
     */
    function addUpdateMenuItems (items, position) {
        if (process.mas) return
    
        const version = electron.app.getVersion()
        let updateItems = [{
            label: `Version ${version}`,
            enabled: false
        }, {
            label: 'Checking for Update',
            enabled: false,
            key: 'checkingForUpdate'
        }, {
            label: 'Check for Update',
            visible: false,
            key: 'checkForUpdate',
            click: function () {
                require('electron').autoUpdater.checkForUpdates()
            }
        }, {
            label: 'Restart and Install Update',
            enabled: true,
            visible: false,
            key: 'restartToUpdate',
            click: function () {
                require('electron').autoUpdater.quitAndInstall()
            }
        }]
    
        items.splice.apply(items, [position, 0].concat(updateItems))
    }
    
    function findReopenMenuItem () {
        const menu = Menu.getApplicationMenu()
        if (!menu) return
    
        let reopenMenuItem
        menu.items.forEach(function (item) {
            if (item.submenu) {
                item.submenu.items.forEach(function (item) {
                    if (item.key === 'reopenMenuItem') {
                        reopenMenuItem = item
                    }
                })
            }
        })
        return reopenMenuItem
    }
    
    // 针对Mac端的一些配置
    if (process.platform === 'darwin') {
        const name = electron.app.getName()
        template.unshift({
            label: name,
            submenu: [{
                label: 'Quit ( 退出 )',
                accelerator: 'Command+Q',
                click: function () {
                    app.quit()
                }
            }]
        })
    
        // Window menu.
        template[3].submenu.push({
            type: 'separator'
        }, {
            label: 'Bring All to Front',
            role: 'front'
        })
    
        addUpdateMenuItems(template[0].submenu, 1)
    }
    
    // 针对Windows端的一些配置
    if (process.platform === 'win32') {
        const helpMenu = template[template.length - 1].submenu
        addUpdateMenuItems(helpMenu, 0)
    }
    
    

    The end.

    相关文章

      网友评论

          本文标题:Electron自定义菜单

          本文链接:https://www.haomeiwen.com/subject/tzgebxtx.html