Electron文档真的比较差
文档质量只差令人发指, 各种官方代码都是不能直接运行起来的, 多些两句说明白一点, 会死吗?
这文档质量堪称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进程)和页面进程
有两种通信方式
- ipc, 可以互相呼唤, 一个类似消息机制.
- remote是在页面进程调用主进程内容, [
contents.executeJavaScript
]是从主进程调用页面进程, 推荐使用这种方式, 简单, 直观, 并且很容易做业务代码集中.- 比如这么干, 我们就可以把所有的菜单代码都集中在主进程, 不必在页面进程写任何菜单相关代码.
- 同样, 页面进程要做很多事, 也可以呼remote直接做.
remote
- const {BrowserWindow} = require(‘electron’).remote
- let win = new BrowserWindow({width: 800, height: 600})
- win.loadURL(‘https://github.com’)
https://electronjs.org/docs/api/remote
contents
- 主进程会保留一个对页面窗口的引用.
- win = new BrowserWindow({width: 800, height: 600})
- win.webContents.openDevTools()
- 这样就拿到了页面窗口的内容
https://electronjs.org/docs/api/web-contents
console.log
- 主进程的会真的喷到terminal
- 页面进程会喷到页面里面dev console