跳到主要内容

Electron 14.0.0

·阅读时长 6 分钟

Electron 14.0.0 已发布! 它包含了 Chromium 93 和 V8 9.3 的升级。我们还添加了多项 API 更新、错误修复和常规改进。 请阅读下文了解更多详情!


Electron 团队很高兴地宣布 Electron 14.0.0 发布!您可以使用 npm 通过 npm install electron@latest 安装,或从我们的发布版本网站下载。 请继续阅读有关此版本的详细信息,并请分享您的任何反馈!

重要变更

Electron 发布周期变更

从 2021 年 9 月的 Electron 15 开始,Electron 将每隔 8 周发布一个主要稳定版本。您可以在此处阅读完整详情。 Electron 15 将于 2021 年 9 月 1 日开始进行 Beta 测试,并于 2021 年 9 月 21 日发布稳定版本。 您可以在此处找到 Electron 的公开时间表。 此外,在 2022 年 5 月之前,Electron 的支持版本将从最新的三个版本更改为最新的四个版本。 有关 Electron 版本控制的更详细信息,请参阅我们的版本控制文档

技术栈变更

重点功能

  • 默认值变更:nativeWindowOpen 现在默认为 true (查看文档)
  • 子窗口不再继承其父窗口的 BrowserWindow 构造选项。#28550
  • 添加了新的 session.storagePath API,用于获取会话特定数据在磁盘上的路径。#28665
  • 添加了 @electron/remote 使用的 process.contextId#28007
  • Electron Fuse 之后添加了实验性 Cookie 加密支持。#29492

有关新功能和更改的完整列表,请参阅14.0.0 版本说明

重大变更

以下是 Electron 14 中引入的重大变更。有关这些变更以及未来变更的更多信息,请参阅计划的重大变更页面。

已移除:app.allowRendererProcessReuse

为了更紧密地与 Chromium 的进程模型保持一致,以提高安全性、性能和可维护性,已移除 app.allowRendererProcessReuse 属性。

有关更详细信息,请参阅#18397

已移除:Browser Window Affinity

为了更紧密地与 Chromium 的进程模型保持一致,以提高安全性、性能和可维护性,创建新的 BrowserWindow 时使用的 affinity 选项已被移除。

有关更详细信息,请参阅#18397

API 变更:window.open()

可选参数 frameName 不再设置窗口标题。 此行为现在遵循 原生文档中对 windowName 参数的规范。

如果您曾使用此参数设置窗口标题,现在可以使用 win.setTitle(title) 方法替代。

已移除:worldSafeExecuteJavaScript

worldSafeExecuteJavaScript 已移除,无替代方案。 请确保您的代码在此属性启用时仍可工作。 自 Electron 12 起,此属性已默认启用。

如果您使用 webFrame.executeJavaScriptwebFrame.executeJavaScriptInIsolatedWorld,将受到此变更影响。 您需要确保这些方法返回的值受 上下文桥接 API 支持,因为这些方法使用相同的值传递语义。

默认值变更:nativeWindowOpen 默认为 true

在 Electron 14 之前,window.open 默认使用 BrowserWindowProxy 填充 (shim)。 这意味着 window.open('about:blank') 无法打开同步可脚本化的子窗口,并存在其他一些不兼容之处。 nativeWindowOpen 不再是实验性的,现在是默认行为。

有关更多详细信息,请参阅Electron 中 window.open 的文档。

已移除:BrowserWindowConstructorOptions 继承父窗口属性

在 Electron 14 之前,通过 window.open 打开的窗口会继承其父窗口的 BrowserWindow 构造选项,例如 transparentresizable。 从 Electron 14 开始,此行为已被移除,窗口将不再继承其父窗口的任何 BrowserWindow 构造选项。

相反,使用 setWindowOpenHandler 为新窗口明确设置选项

webContents.setWindowOpenHandler((details) => {
return {
action: 'allow',
overrideBrowserWindowOptions: {
// ...
},
};
});

已移除:additionalFeatures

WebContents 的 `new-window` 和 `did-create-window` 事件中已弃用的 `additionalFeatures` 属性已被移除。 由于 `new-window` 使用位置参数,该参数仍然存在,但将始终是空数组 `[]`。(注意:`new-window` 事件本身已被弃用,并已由 `setWindowOpenHandler` 替代。) 窗口功能中的裸键现在将以值为 `true` 的键出现在选项对象中。

// Removed in Electron 14
// Triggered by window.open('...', '', 'my-key')
webContents.on('did-create-window', (window, details) => {
if (details.additionalFeatures.includes('my-key')) {
// ...
}
});

// Replace with
webContents.on('did-create-window', (window, details) => {
if (details.options['my-key']) {
// ...
}
});

已移除:remote 模块

在 Electron 12 中已弃用,remote 模块现已从 Electron 本身移除,并被提取到一个单独的包 @electron/remote 中。 `@electron/remote` 模块将主进程的 JavaScript 对象桥接到渲染器进程。 这使您可以访问仅主进程的对象,如同它们在渲染器进程中可用一样。 这是 remote 模块的直接替代品。 有关迁移说明和参考,请参阅模块的 readme 文件

API 变更

  • 添加了 BrowserWindow.isFocusable() 方法以确定窗口是否可聚焦。#28642
  • 添加了 WebFrameMain.visibilityState 实例属性。#28706
  • dispositionreferrerpostBody 添加到传递给通过 setWindowOpenHandler 注册的窗口打开处理程序的 details 对象中。#28518
  • 添加了 @electron/remote 使用的 process.contextId#28007
  • Electron Fuse 之后添加了实验性 Cookie 加密支持。#29492
  • webRequest 监听器详细信息添加了缺失的 resourceType 转换:fontpingcspReportmediawebSocket#30050
  • 添加了新的 session.storagePath API,用于获取会话特定数据在磁盘上的路径。#28665
  • 添加了在 macOS 上支持 Windows Control Overlay。#29986
  • 添加了使用 --log-file=.../path/to/file.log 将 Chromium 日志记录到文件的支持。此外,现在可以通过在第一次 JS tick 期间附加命令行开关,从 JavaScript 中启用日志记录。#29963
  • 在 Node crypto 中添加了对 des-ede3 密码算法的支持。#27897
  • 添加了一个 ContextBridgeMutability 特性,允许修改上下文桥接对象。#27348

已移除/已弃用变更

以下 API 已被移除或现已弃用

  • remote 模块在 Electron 12 中弃用后已被移除。#25734
  • 子窗口不再继承其父窗口的 BrowserWindow 构造选项。#28550
  • 从 `new-window` 和 `did-create-window` WebContents 事件中移除了已弃用的 `additionalFeatures` 属性。#28548
  • 移除了已弃用的 app.allowRendererProcessReuse 和 BrowserWindow affinity 选项。#26874
  • uploadToServer 为 false 时,crashReporter.startsubmitURL 选项不再是必需参数。#28105

11.x.y 版本终止支持

根据项目的支持政策,Electron 11.x.y 已终止支持。 鼓励开发者和应用程序升级到更新的 Electron 版本。

后续计划

短期内,您可以期待团队继续专注于跟进构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。虽然我们谨慎对待发布日期的承诺,但我们的计划是大约每季度发布包含这些组件新版本的新 Electron 主要版本。

有关即将发布的 Electron 版本中计划的重大变更的信息,请参阅我们的计划的重大变更