注意

2021 年 12 月整个月,Electron 的开发工作将会暂停,不会发布Beta或Stable版本,只有可能发修复 0 day漏洞或其他安全相关的版本,pull request、merge、issue 都不会处理。原因是 Electron 团队想休息充电一下,同时他们也提倡其他公司和项目也把十二月作为 「Quiet Month」😆
A Quiet Place (Dec’21)

显著变化

1. Electron版本发布周期变化

从 Electron 15 开始,新的 major 版本发布周期会从 12 周改为 8 周,原因是 Chromium 计划在 Chrome 94 开始把发布周期从 6 周改为 4 周。而 Microsoft 商店政策要求 Chromium 内核的 app 使用的 Chromium 版本不能落后于最新版超过 2 个 major 版本。
New Electron Release Cadence

2. 技术栈变化

Electron 15 使用以下版本:

  • Chromium 94
  • Node.js 16.5.0
  • V8 9.4

V8 9.3-9.4 新特性

亮点特性

1. 新增 safeStorage 字符串加密 API

safeStorage 提供三个 API isEncryptionAvailable()encryptString(plainText)decryptString(encrypted),允许对本地存储的数据做简单的加密解密。

2. WebContents 新增 “frame-created” 事件

当前页面的 content.mainFrame<iframe> 或嵌套的 <iframe> 加载完后,即该页面的其中一个frame创建完成后,触发“frame-created”事件。

3. BrowserWindow 的 “will-resize” 事件新增 edge 属性

  1. interface BrowserWindow {
  2. on(event: 'will-resize', listener: (event: Event,
  3. newBounds: Rectangle,
  4. + details: { edge: string }
  5. ) => void): this;
  6. }

“will-resize”事件的这个属性能告诉我们,用户是通过拖拽窗口的哪个边缘来调整窗口大小。
edge属性一共有7个值:bottom, left, right, top-left, top-right, bottom-left, bottom-right
这个属性可以让我们更好的根据窗口改变做出不同操作,比如当窗口只在垂直方向 resize 时才调整横纵比(aspect radio)。

突破性变化

Electron 15 的 Breaking Changes 很少,只有一个:

1. nativeWindowOpen: true 成为默认属性

在 Electron 15 之前,window.open() 默认使用 BrowserWindowProxy 来创建窗口并返回一个 BrowserWindowProxy 实例,但 window.open('about:blank') 并不能打开正常打开子窗口。参考:window.open
在 Electron 15 中,nativeWindowOpen: true 现在从实验室属性,变成默认属性了。
该属性控制是否使用原生的window.open(),为 false 时需要通过 BrowserWindowProxy 这个 wrapper 来创建窗口。

API 变化

1. dialog.showMessageBox 新增 signal 选项

dialog.showMessageBoxsignal 选项接收一个 AbortSignal 实例,可以选择性的关闭消息框,该行为和用户关闭消息框的表现一致。在 macOS 上,signal 不适用于没有父窗口的消息框,因为这些消息框由于平台限制而同步运行。

2. Electron Fuses 支持在 macOS 上验证 asar

Electron Fuses 支持 app 在加载的 app.asar 文件时强制执行代码签名。要求最新的 asar 模块(v3.1.0及以上)。

3. Electron Fuses 支持禁用 NODE_OPTIONS 和 —inspect

Electron Fuses 支持在打包好的 app 里禁用 NODE_OPTIONS 和 —inspect 调试参数。

4. 新增 MenuItem.userAccelerator 读取 macOS 用户指定菜单快捷键

不同于已有的 MenuItem.accelerator 读取默认的菜单快捷键,MenuItem.userAccelerator 在 macOS 下可以读取用户指定的菜单快捷键。参考:macOS User Key Equivalent

延伸: accelerator key、shortcut、hot key 都指快捷键,非要仔细区分,大致可以这么分:

  • accelerator key: 一般是指在一个应用内的快捷键,通常是用户指定/修改过的快捷键。
  • shortcut: 一般是指本地菜单功能或窗口功能的默认快捷键。
  • hot key: 热键一般是系统层面的默认组合键。

参考:StackOverflow - What is difference between hotkey, shortcut and accelerator key?

5. 新增 app.runningUnderARM64Translation 属性检测 x64 应用运行在 ARM 设备转译环境上

app.runningUnderARM64Translation 属性支持检测当前应用是否运行在 ARM64 转译环境上,比如 macOS Rosetta、Windows WOW。当用户错误地在转译环境下运行 x64 版本,可以使用此属性来提示用户下载应用程序的 arm64 版本。

6. 新增 imageAnimationPolicy 网页设置来控制图片动画

imageAnimationPolicyBrowserWindowwebPreferences 属性新增的网页功能设置属性。该属性可以指定网页的图片如gif等的动画效果,可选值有 animateanimateOncenoAnimation,默认为 animate

7. 支持通过 contextBridge 发送 blob 数据

Electron 15 支持通过 blob 对象作为参数传入 contextBridge.exposeInMainWorld API。

版本支持

从 Electron 15 开始,到 Electron 19 出来前,会从支持最新 3 个版本,改成支持最新 4 个版本。在 Electron 19 及以后,改回支持最新 3 个版本。即目前 Electron 15 版本期间,还会对 Electern 12 支持。

E15 (21年9月) E16 (21年11月) E17 (22年2月) E18 (22年3月) E19 (22年5月)
15.x.y 16.x.y 17.x.y 18.x.y 19.x.y
14.x.y 15.x.y 16.x.y 17.x.y 18.x.y
13.x.y 14.x.y 15.x.y 16.x.y 17.x.y
12.x.y 13.x.y 14.x.y 15.x.y

原文链接

Electron 15.0.0