基础应用
此笔记参考 刘晓伦著作的 ELectron实战:入门、进阶与性能优化
1、安装
1 | - npm i electron -D |
2、生态
1 | 1、electron-builder |
3、优势
1 | 1、相较于基于C++库开发桌面软件来说,基于Electron开发更容易上手且开发效率更高 |
4、不足
1 | 1、·打包后的应用体积巨大 (至少40M) |
5、未来的竞争者 PWA
1 | PWA(Progressive Web App),即渐进式Web应用。MDN上的定义为:运用现代的Web开发技术以及传统的渐进式增强策略来创建跨平台Web应用程序。 |
6、搭建环境
1 | 1、安装nodejs |
7、创建窗口界面
1 | // 新建一个 index.html 文件 |
8、Electron API演示工具
9、试验工具Electron Fiddle
10、主进程与渲染进程
Electron应用程序开发人员不用关心线程的问题,但要关心进程的问题。Electron应用程序区分主进程和渲染进程,而且主进程和渲染进程互访存在着很多误区,因此开发人员一不小心就会犯错。
1 | 1、区分主进程与渲染进程 |
11、进程调试
1 | 1、主进程调试 vscode |
12、进程互访
1 | remote 模块 |
13、进程间消息传递
1 | 1、渲染进程向主进程发送消息 |
引入现代前端框架
webpack,vue,react,jquery…
引入 webpack
1 | 通过以下命令安装webpack和electron-webpack模块: |
引入 react
1 | 为了快速引入React,我们使用electron-react- boilerplate(https://github.com/electron-react-boilerplate/electron-react-boilerplate) |
窗口
大部分桌面GUI应用都是由一个或多个窗口组成的,在前面的章节中我们已经创建了很多Electron窗口(也就是BrowserWindow),但窗口的属性只用到了webPreferences:{nodeIntegration:true}。其实,Electron的BrowserWindow还有很多种可用属性
属性
1 | 1、位置属性 |
方法
1 | // 使用 remote |
设置不规则窗口
1 | eg: // 设置圆形窗口 |
阻止窗口关闭
1 | // 开发网页时 会弹出一个警告提示,但在 electron应用中不会关闭,但没有提示 |
记录与恢复窗口状态
1 | // 改变窗口状态时,记录 |
多窗口竞争资源
Electron应用中一个窗口就代表着一个渲染进程,此场景下,两个渲染进程可能会同时读写一个本地文件。这可能会出现异常或表现不符预期的问题。
1 | JavaScript是单线程执行的事件驱动型语言,如果我们在同一个窗口(渲染进程)同时发起多个请求,操作同一个文件,就不会出现任何问题(须使用Node.js的fs.writeFileSync同步方法或者控制好异步回调的执行顺序) |
模态窗口与父子窗口
1 | 模态框: 用户在窗口A业务操作,打开窗口B。完成操作后关闭窗口B才能返回窗口A。那么窗口B就是模态框 |
界面
如果把一个GUI应用比作一个房屋的话,窗口、标题栏和边框就是房屋的墙、房顶和地板,界面就是房屋内各类生活用品,比如桌椅板凳、电视电话等。要想建设一个功能复杂且用户体验优秀的GUI应用,开发者势必会在界面上花费大量的时间和精力
页面内容
1 | 1、获取 webContents 实例 |
页面加载事件及触发顺序
1 | 1、did-start-loading // 页面加载过程第一个事件 |
页面跳转事件
1 | 凡是以navigate命名的事件,一般都是由客户端控制的跳转,比如用户点击了某个链接或者JavaScript设置了window.location属性; |
1 | 1、单页应用中的页内跳转 |
页面缩放
1 | 1、webContents的setZoomFactor方法来设置页面的缩放比例,此方法接收一个缩放比例的参数 |
渲染海量数据元素
1 | 1、canvas |
页面容器
1 | 1、webFrame |
脚本注入
1 |
|
页面效果
1 | 1、css 控制动画 |
数据
使用本地文件持久化数据
1 | 1、用户数据目录 |
使用浏览器技术持久化数
1 | Local Storage和Cookies |
读写受限访问的Cookie
1 | // 读取Cookie |
清空浏览器缓存
1 |
|
系统
系统对话框
1 | const { dialog,app } = require("electron").remote; |
菜单
1 | 1、默认菜单, 自定义菜单 |
快捷键
1 | 使用快捷键来操作应用程序往往比使用鼠标更快捷,比如按下Ctrl+S快捷键保存文档,按下Ctrl+F快捷键打开“查找”对话框等。 |
托盘图标
1 | 电脑下面工具条左下角有个小三角,开打里面有很多应用图表 |
剪切板
1 | 1、剪切文本 |
截图
1 | 在electron中提供了desktopCapturer模块,该模块只能在渲染进程使用。 |
系统通知
1 | 1、使用HTML API发送系统通知 |
其他
1 | 1、使用系统默认应用打开文件 |
通信
现代桌面GUI应用很少有孤立存在的,它们往往都需要和其他应用通信,比如和Web服务器上的服务进行通信、和系统内其他应用进行通信等。
与Web服务器通信
1 | 1、禁用同源策略以实现跨域 |
与系统内其他应用通信
1 | 1、Electron应用与其他应用通信 |
自定义协议(protocol)
1 | 使用HTTP协议(http://)加载界面内容,这要在本地创建一个HTTP服务 |
使用socks5代理
1 | 当你的电脑A无权访问Internet,而另一台电脑B可以访问时,此时就可以让电脑A先连接电脑B,然后通过电脑B来访问Internet。那么电脑B就是电脑A的代理服务器。 |
硬件
以前,Web前端技术是没办法访问客户机内的硬件设备的,比如音视频设备、电源设备等。后来HTML5提供了一系列的技术来弥补这项不足,但安全限制颇多,一旦网页尝试使用这些硬件设备,则弹出用户授权窗口,用户授权后网页才有能力访问这些设备。Electron可以自由地使用这些技术,而且默认拥有这些硬件的访问权限,Electron内部甚至还提供了额外的支持以帮助开发者使用更多的硬件能力。
屏幕
1 | 1、获取扩展屏幕 |
音视频设备
1 | 在开发Web网页时,如果要使用用户的音视频设备,浏览器为了安全,会向用户发出提示 |
电源
1 | 1、电源的基本状态和事件 |
打印机
1 | 1、控制打印行为 |
硬件信息
1 | 1、 获取目标平台硬件信息 |
调试
调试
1 |
|
日志
1 | 业务足够复杂的应用程序时,往往会在关键业务执行时记录日志。这些日志在排查问题、跟踪调用流程时非常有用。 |
安全
代码运行在浏览器的安全沙箱中,可获得的权限十分有限,开发代码时对安全的考虑也主要集中在XSS(跨站脚本攻击)和CSRF(跨站请求攻击)等问题上。
1 | // 跨站脚本攻击(XSS,Cross Site Scripting): |
保护源码
1 | 1、立即执行函数 |
保护客户
1 | 1、禁用Node.js集成 |
保护网络
1 |
保护数据
1 | 1、使用Node.js加密解密数据 |
提升稳定性
1 |
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2022/06/17/programming/electron/安装使用/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!