从开发的角度来说,Electron应用本质上是一个Node.js 应用。
核心内容
- Electron包含三个核心
- Chromium 用于显示网页内容
- Node JS 用于本地文件系统和操作系统
- 自定义APIs 用于使用经常需要的OS本机函数
- 主进程和渲染进程
- 主进程通过创建BrowserWindow实例来创建网页。每个实例在起渲染过程中运行网页,当实例销毁时,对应渲染过程也会被终止。
- 主进程管理所有网页及其对应的渲染进程,渲染进程只能管理相应的网页。
- 渲染进程通过IPC于主进程通信在网页上执行GUI操作。
安装
// 创建一个文件夹并安装Electron
mkdir my-electron-app && cd my-electron-app
npm init -y
npm i --save-dev electron
API
- app:控制应用程序的事件生命周期(主进程)
- whenReady():当Electron完成初始化,返回Promise
- isReady():如果Electron完成初始化,返回true
- app对象会发出以下事件:app.on(event, function(){})
- ready:当Electron完成初始化时,发出一次
- window-all-closed:当所有的窗口都被关闭时触发
- quit:在应用程序退出时发出,windows系统中系统关机重启注销时事件不触发
- BrowserWindow:创建和控制浏览器窗口(主进程)
- 无边框窗口:将frame设置为false
- 保留窗口控制按钮:将titleBarStyle设置为hidden
- 透明窗口:将transparent设置为true
- 父子窗口:新建一个BrowserWindow实例,将parent设置为父窗口实例
- 网页功能设置:webPreferences
- 启用node集成:将nodeIntegration 设置为true
- 启用远程模块:将enableRemoteModule 设置为true
- 禁用同源策略:将webSecurity 设置为false
- 启用插件:将plugins 设置为true
- 实例方法:
- 加载html文件:win.loadFile( filePath[, options] )
- 加载url地址:win.loadURL(url[, options])
- 开启控制台:win.webContents.openDevTools()
- 显示并聚焦于窗口:win.show()
- 实例会发出以下事件:win.on(event, () => {})
- ready-to-show:渲染进程第一次绘制后窗口未被显示,渲染进程会发出该事件。
- close:当窗口关闭时发出,收到此事件后需要手动删除对窗口的引用,并避免再次使用它。
- ipcMain:从主进程到渲染进程的异步通信(主进程)
- 发送消息:可以从主进程向渲染进程发送消息
- 发送消息时,事件名称为 channel
- 回复同步消息时,需要设置event.returnValue值
- 回复异步消息时,使用event.reply(channel, 回复值)
- 以下方法来侦听事情
- on(channel, listener(event, args)) 监听channel,当接受到新消息时listener回调函数会被调用
- once(channel, listener) 监听channel第一次调用,回调触发之后移除该监听
- 渲染进程向主进程发送消息例子: *渲染进程发送数据:ipcRenderer.send('channel-message', '渲染进程的数据') *主进程监听接收数据:ipcMain.on('channel-message', (event, arg) => { // arg == '渲染进程的数据' })
- 发送消息:可以从主进程向渲染进程发送消息