基础应用
此笔记参考 刘晓伦著作的 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 许可协议。转载请注明出处!
 
		
                
                LiYongci
              
                
                衔蝉
              
                
                哈希米