文档质量只差令人发指, 各种官方代码都是不能直接运行起来的, 多些两句说明白一点, 会死吗?
这文档质量堪称java水准的, 完全不是开源项目的正常水准, 恐怕还是因为主架构师是华人, 然后去写英文文档的原因.

菜单和快捷键

菜单本身分两种,

  • 窗口左边的是menu, 这个一般是文字形式, 带着快捷键.
  • 右边的是tray, 这个一般是个小图标, 做这种设计, 至少要给用户关掉它的选项(鄙视腾讯, 他家的东西都是硬停留), 因为某些大型应用的菜单确实很多项目.

快捷的设置也有两种

  • local的, 需要应用获得焦点的时候才可以用的快捷键.
  • global的, 啥时候敲都有用

local的快捷键和菜单是在一起的, 也有两种编写方式.

  • menu.append, 这个就是官网给的坑爹的写法, mmp, nnd, 根本就跑不起来, 或者说很难跑起来, 跑起来也不是你想想的样子……
  • 基于template的: Menu.setApplicationMenu(Menu.buildFromTemplate(template));

这个template是一个json

[
     {
       label: 'Filter',
       submenu: [
         {
           label: 'Hello',
           accelerator: 'Shift+CmdOrCtrl+H',
           click() {
               console.log('Oh, hi there!')
           }
         },
         {
           label: 'save',
           accelerator: 'Cmd+S',
           click() {
               console.log('Oh, save save')
           }
         }
       ]
     }
   ]

但是, 你会发现一个问题, 如何替换掉electron默认的menu呢?

  • 设置app.setName, 并且直接package才行: https://stackoverflow.com/questions/36123964/how-to-set-up-application-menu-in-electron
  • 然后, 不是electron .这样来启动的: https://stackoverflow.com/questions/34840026/change-native-menu-on-electron-app
  • 官网说, 去修改info.plist, 真的这个很多草泥马跑过去了. 咋改啊?

然后官网说如果role配上了, 那么就是默认菜单了, 但是, role的列表在哪里? 或者我要到哪里去找??????

  • 找到了, 在这份文档: https://github.com/electron/electron/blob/master/docs/api/menu-item.md#roles
  • 总之electron的文档组织毫无逻辑可言
  • 奶奶的, 真的是java风格的文档, 文档里面写的role: toggleDevTools, 实际上必须全小写才能识别, nnd, 恨死人了, 担心中文坑我, 所以特意看的英文, 依旧坑死人

如果你不想:

  • 在主进程的onready里面搞这个
  • 或者你在主进程搞, 但是, 你需要页面进程的内容(当然啦, 各种编辑类操作, 你编辑的肯定是页面进程的内容)

那么, 你就需要下面这个课题.

主进程(app进程)和页面进程

有两种通信方式

  1. ipc, 可以互相呼唤, 一个类似消息机制.
  2. remote是在页面进程调用主进程内容, [contents.executeJavaScript]是从主进程调用页面进程, 推荐使用这种方式, 简单, 直观, 并且很容易做业务代码集中.
    1. 比如这么干, 我们就可以把所有的菜单代码都集中在主进程, 不必在页面进程写任何菜单相关代码.
    2. 同样, 页面进程要做很多事, 也可以呼remote直接做.

remote

  1. const {BrowserWindow} = require(‘electron’).remote
  2. let win = new BrowserWindow({width: 800, height: 600})
  3. win.loadURL(‘https://github.com’)

https://electronjs.org/docs/api/remote

contents

  1. 主进程会保留一个对页面窗口的引用.
  2. win = new BrowserWindow({width: 800, height: 600})
  3. win.webContents.openDevTools()
  4. 这样就拿到了页面窗口的内容

https://electronjs.org/docs/api/web-contents

console.log

  • 主进程的会真的喷到terminal
  • 页面进程会喷到页面里面dev console