Logo Vincent
返回文章列表

Electron-开发实践:定制Mac菜单

Electron
Electron-开发实践:定制Mac菜单
目录

【前言】

前面几篇文章讲了从开发electron应用到mac打包,

相关文章:

一篇文章学会Electron

Electron-开发实践:本地数据库SQLite

Electron-开发实践:使用Monorepo管理Electron项目

Electron-开发实践:Mac打包

Electron-开发实践:注册苹果开发者账号

Electron-开发实践:Mac应用包签名和公证

Electron-开发实践:DMG安装包定制

本文讲一下自定义mac菜单

【默认mac菜单】

使用electron开发mac应用,

如果没有定制mac菜单,

默认的效果如下,

使用electron的menu可以自定义mac菜单栏,

https://www.electronjs.org/zh/docs/latest/api/menu

核心代码如下,其中的template是一个menu模板数组,

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

使用封装好的role

菜单模板中一种常见的方式是使用封装好的role,

就是electron将常见的菜单项和点击操作封装为了一个role,

如下,

[
  {
    label: "Edit",
    submenu: [
      { role: "undo" },
      { role: "redo" },
      { type: "separator" },
      { role: "cut" },
      { role: "copy" },
      { role: "paste" },
    ],
  },
];

例如上面的copy这个role,点击后就会执行复制操作

使用自定义菜单项

除了使用内置的role,还可以自定义菜单项,如下

[
  {
    role: "help",
    submenu: [
      {
        label: "Learn More",
        click: async () => {
          const { shell } = require("electron");
          await shell.openExternal("https://electronjs.org");
        },
      },
    ],
  },
];

常见模板

按国内的应用菜单,准备了一个常见的模板,如下

[
  {
    label: "app",
    submenu: [
      {
        label: "关于",
        role: "about",
      },
      {
        type: "separator",
      },
      {
        label: "隐藏",
        role: "hide",
      },
      {
        label: "隐藏其他",
        role: "hideOthers",
      },
      {
        type: "separator",
      },
      {
        label: "退出",
        role: "quit",
      },
    ],
  },
  {
    label: "编辑",
    submenu: [
      {
        label: "撤销",
        role: "undo",
      },
      {
        label: "重做",
        role: "redo",
      },
      {
        type: "separator",
      },
      {
        label: "剪切",
        role: "cut",
      },
      {
        label: "复制",
        role: "copy",
      },
      {
        label: "粘贴",
        role: "paste",
      },
      {
        label: "删除",
        role: "delete",
      },
      {
        label: "选中所有",
        role: "selectAll",
      },
    ],
  },
  {
    label: "窗口",
    submenu: [
      {
        label: "最小化",
        role: "minimize",
      },
      {
        label: "关闭",
        role: "close",
      },
      {
        label: "自动全屏",
        role: "togglefullscreen",
      },
    ],
  },
  {
    label: "调试",
    submenu: [
      {
        label: "调试",
        role: "toggleDevTools",
      },
    ],
  },
];

效果

【qiao-x-menu】

封装了一个操作electron menu的库,欢迎使用,

https://code.insistime.com/#/qiao-x-menu

上面定制mac菜单的操作可以简化为,

import { setApplicationMenu } from "qiao-x-menu";

setApplicationMenu(menus);

相关推荐

Electron-开发实践:本地日志

【前言】 使用electron开发好本地应用后, 本地日志记录必不可少, 这样可以通过日志获取用户操作信息以及定位bug等, 本地日志与实时性的埋点上报稍微有不同, 本地日志量更大,信息更全,且不是所有信息都时候上报。 【与nodejs本地日志的异同】 electron写本地日志和nodejs写本地

Electron-开发实践:注册快捷键

【前言】 本文介绍一下electron应用中如何注册快捷键 【主进程】 主进程注册快捷键比较简单,需要注意的是在app ready后使用, 常见键盘映射: https://www.electronjs.org/docs/latest/api/accelerator 另外在推出app时需要将所有注册的

Electron-开发实践:几种更新方式

【前言】 Electron开发桌面APP后, 接着涉及一个问题就是如何更新后续的版本, 本文介绍几种更新的方式。 【Electron架构】 用Electron开发的桌面APP, 其实包含几个部分: 1\. Electron本身的环境 2\. 主进程,主进程中又分为Nodejs部分,和非Nodejs部

Electron-开发实践:包体积精简

【前言】 前面几篇文章讲了从开发electron应用到mac打包, 相关文章: 一篇文章学会Electron Electron开发实践:本地数据库SQLite Electron开发实践:使用Monorepo管理Electron项目 Electron开发实践:Mac打包 Electron开发实践:注册

Electron-开发实践:DMG安装包定制

【前言】 dmg文件是mac端常见的安装包格式, 前面几篇文章已经使用electron开发并打包好一个应用了, 本文主要讲下定制dmg安装包, 前面几篇文章: 一篇文章学会Electron Electron开发实践:本地数据库SQLite Electron开发实践:使用Monorepo管理Elect

© 2026 vincentqiao.com . 保留所有权利。