图书目录

目    录

第Ⅰ部分  Electron入门知识

第1 章  介绍Electron   3

1.1  什么是Electron   3

1.1.1  什么是Chromium Content Module   5

1.1.2  什么是Node.js   6

1.2  哪些人在使用Electron   6

1.3  阅读本书之前,需要知道些什么   8

1.4  为何要使用Electron   8

1.4.1  重用现有技能   10

1.4.2  访问原生操作系统API   10

1.4.3  更高运行权限,更少功能限制   11

1.4.4  在浏览器环境中使用Node的功能   13

1.4.5  离线优先   14

1.5  Electron的工作原理   14

1.5.1  主进程   15

1.5.2  渲染器进程   15

1.6  对比Electron与NW.js   16

1.7  本章小结   17

第2 章  创建第一个Electron应用   19

2.1  创建一个书签列表应用   20

2.1.1  组织Electron应用的结构   21

2.1.2  package.json   22

2.1.3  在项目中下载并安装Electron   23

2.2  使用主进程   25

2.3  创建一个渲染器进程   26

2.3.1  从渲染器进程加载代码   30

2.3.2  在渲染器进程中引入文件   31

2.3.3  在渲染器进程中添加样式   32

2.4  实现UI界面   33

2.4.1  在Electron中发出跨域请求   35

2.4.2  解析响应文本   36

2.4.3  使用Web Storage API存储从响应中得到的信息   38

2.4.4  显示请求的结果   39

2.4.5  预防错误   43

2.4.6  一个不期而至的bug   45

2.5  本章小结   49

第Ⅱ部分  使用Electron创建跨平台应用

第3 章  创建一个笔记应用   53

3.1  定义应用的目标   54

3.2  打下基础   55

3.3  初始化并启动应用   56

3.3.1  实现UI界面   57

3.3.2  优雅地显示浏览器窗口   63

3.4  实现基本功能   64

3.5  调试Electron应用   67

3.5.1  调试渲染器进程   67

3.5.2  调试主进程   68

3.5.3  使用Visual Studio Code调试主进程   69

3.6  本章小结   72

第4 章  使用原生文件对话框与实现跨进程通信   73

4.1  触发原生文件对话框   74

4.2  使用Node读文件内容   77

4.2.1  限定允许打开的文件类型   78

4.2.2  在macOS系统中实现工作表对话框   81

4.3  实现跨进程通信   82

4.4  使用跨进程通信调用文件打开功能   87

4.4.1  理解CommonJS模块系统   88

4.4.2  引入其他进程的功能   88

4.5  从主进程向渲染器进程发送内容   90

4.6  本章小结   95

第5 章  创建多窗口应用   97

5.1  创建和管理多个窗口   98

5.1.1  主进程与多个窗口之间的通信   99

5.1.2  将指向当前窗口的引用传给主进程   101

5.2  改进新建窗口的用户体验   103

5.3  与macOS集成   105

5.4  本章小结   108

第6 章  操作文件   111

6.1  跟踪当前打开的文件   113

6.1.1  使用当前文件的名称更新窗口标题   114

6.1.2  检测是否修改过当前文件   116

6.1.3  启用UI界面上的Save File和Revert按钮   118

6.1.4  更新macOS系统的展示文件   119

6.2  跟踪最近打开的文件   120

6.3  保存文件   122

6.3.1  导出渲染的HTML内容   123

6.3.2  常用路径   124

6.3.3  从渲染器进程保存文件   125

6.3.4  保存当前文件   125

6.3.5  回滚文件   127

6.4  通过拖曳打开文件   127

6.4.1  忽略无关区域的拖曳操作   127

6.4.2  提供可视化反馈   128

6.4.3  打开拖曳过来的文件   131

6.5  监控文件的变动   131

6.6  丢弃未保存的修改前提示用户   134

6.7  本章小结   138

第7 章  创建应用菜单和上下文菜单   141

7.1  替换并复制默认菜单   143

7.1.1  macOS系统的Edit菜单消失之谜   144

7.1.2  替换Electron默认菜单的隐形代价   146

7.1.3  实现Edit和Window菜单   147

7.1.4  定义菜单项的role属性和键盘快捷键   148

7.1.5  恢复macOS系统的应用菜单   149

7.1.6  添加Help菜单   153

7.2  在菜单中添加应用特有的功能   155

7.3  创建上下文菜单   160

7.4  本章小结   162

第8 章  与操作系统更深入地集成以及动态启用菜单项   163

8.1  在渲染器进程(UI界面)中使用shell模块   164

8.2  在应用菜单中使用shell模块   167

8.3  在上下文菜单中使用shell模块   169

8.3.1  决定将功能放在菜单中还是UI界面上   170

8.3.2  决定将功能放在应用菜单还是上下文菜单中   171

8.4  在适当的时候禁用菜单项   171

8.4.1  动态启用和禁用上下文菜单中的菜单项   172

8.4.2  动态启用和禁用应用菜单中的菜单项   175

8.5  本章小结   181

第9 章  介绍tray模块   183

9.1  开始创建Clipmaster   184

9.2  使用tray模块创建一个应用   185

9.2.1  为macOS和Windows选择不同的图标   187

9.2.2  支持macOS的深色模式   188

9.2.3  从剪贴板读取内容并保存剪贴项   189

9.3  读写剪贴板的内容   191

9.3.1  写入剪贴板   193

9.3.2  处理极端场景   195

9.4  注册全局快捷键   198

9.5  显示通知   201

9.6  在macOS系统中单击菜单栏图标时,切换显示的图标   204

9.7  完整的代码   205

9.8  本章小结   208

第10 章  在应用中使用menubar库   209

10.1  使用menubar开始创建应用   210

10.2  向UI界面添加剪贴项   214

10.3  在应用中操作剪贴项   216

10.3.1  使用事件代理避免内存泄漏   216

10.3.2  删除一个剪贴项   217

10.3.3  将数据写入剪贴板   219

10.4  发布剪贴项   220

10.5  显示通知和注册全局快捷键   223

10.5.1  注册全局快捷键   224

10.5.2  处理从未打开过窗口的极端场景   226

10.6  添加第二个菜单   227

10.7  本章小结   229

第11 章  使用转译器和框架   231

11.1  介绍electron-compile   233

11.2  打造应用的基础   234

11.3  在React中创建UI界面   241

11.3.1  Application组件   241

11.3.2  显示物品列表   244

11.4  添加新的物品   248

11.5  实时重新加载与模块热加载   252

11.5.1  启用实时重新加载   252

11.5.2  实现模块热加载   253

11.6  本章小结   256

第12 章  保存用户数据以及使用Node.js原生模块   259

12.1  在SQLite数据库中存储数据   260

12.1.1  使用electron-rebuild确保编译出正确的版本   261

12.1.2  使用SQLite和Knex.js   262

12.1.3  将数据库功能挂载到React应用   263

12.1.4  从数据库获取所有数据项   265

12.1.5  向数据库中添加数据项   266

12.1.6  更新数据库中的数据项   268

12.1.7  删除数据项   270

12.1.8  将数据库存储在正确的地方   275

12.2  IndexedDB   276

12.2.1  在IndexedDB中创建仓库   277

12.2.2  从IndexedDB获取数据   278

12.2.3  向IndexedDB写入数据   279

12.2.4  将数据库操作连接到UI界面   282

12.3  本章小结   284

第13 章  使用Spectron测试应用   285

13.1  介绍Spectron   287

13.2  使用Spectron和WebdriverIO   289

13.3  设置Spectron和测试运行器   290

13.4  使用Spectron编写异步测试   292

13.4.1  等待窗口加载   293

13.4.2  测试Electron Browser Window API   294

13.4.3  使用Spectron遍历和测试DOM   294

13.4.4  使用Spectron控制Electron API   297

13.5  本章小结   298

第Ⅲ部分  部署Electron应用

第14 章  构建并部署应用   301

14.1  介绍Electron Packager   302

14.1.1  设置Electron Packager   302

14.1.2  配置输出目录   304

14.1.3  配置应用的名称和版本   304

14.1.4  更新应用图标   305

14.1.5  针对多个操作系统进行构建   306

14.2  使用asar档案文件   307

14.3  Electron Forge   310

14.3.1  将一个Electron应用导入Electron Forge   311

14.3.2  使用Electron Forge构建应用   312

14.4  本章小结   313

第15章  发布和更新应用   315

15.1  收集崩溃报告   315

15.1.1  设置崩溃报告   316

15.1.2  设置一台接收崩溃报告的服务器   319

15.1.3  报告未捕获异常   322

 15.2  应用签名   324

15.2.1  签署macOS应用   325

15.2.2  在Windows系统中创建安装程序和进行代码签名   328

15.3  自动更新应用   331

15.3.1  在Electron中设置自动升级   332

15.3.2  搭建一台自动更新服务器   334

15.4  本章小结   337

第16 章  通过Mac App Store分发应用   339

16.1  将应用提交到Mac App Store   339

16.1.1  签署应用   340

16.1.2  向Mac App Store注册应用   345

16.1.3  将应用添加到iTunes Connect   346

16.1.4  为Mac App Store打包应用   348

16.1.5  配置应用类别   352

16.1.6  注册应用以打开一种文件类型   352

16.2  验证和上传应用   354

16.3  收尾事项   355

16.4  本章小结   355

附录  Fire Sale和Clipmaster 9000的源代码   357