跳转到主要内容

Electron 14.0.0

·7分钟阅读

Electron 14.0.0 已发布!它包含了 Chromium 93 和 V8 9.3 的升级。我们添加了几项 API 更新、bug 修复和通用改进。请继续阅读以获取更多详情!


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

Electron 发布节奏变更

从 2021 年 9 月开始,Electron 15 将每 8 周发布一个新的主要稳定版本。 您可以阅读 完整的详细信息。 Electron 15 将于 2021 年 9 月 1 日开始 beta 版,并于 2021 年 9 月 21 日发布稳定版。 您可以在 这里找到 Electron 的公共时间表。 此外,Electron 将更改支持的版本,从最新的三个版本到最新的四个版本,直到 2022 年 5 月。 请参阅 我们的版本控制文档,了解有关 Electron 版本控制的更多详细信息。

值得注意的变化

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

请参阅 14.0.0 版本说明,以获取完整的新功能和更改列表。

堆栈变化

破坏性变更

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

移除:app.allowRendererProcessReuse

app.allowRendererProcessReuse 属性已被移除,这是我们为了更紧密地与 Chromium 的进程模型保持一致,以提高安全性、性能和可维护性而采取的计划的一部分。

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

移除:浏览器窗口关联性

在创建新的 BrowserWindow 时使用的 affinity 选项已被移除,这是我们为了更紧密地与 Chromium 的进程模型保持一致,以提高安全性、性能和可维护性而采取的计划的一部分。

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

API 更改:window.open()

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

如果您正在使用此参数来设置窗口的标题,则可以使用 win.setTitle(title) 方法。

移除:worldSafeExecuteJavaScript

worldSafeExecuteJavaScript 已移除,没有替代方案。请确保您的代码在启用此属性的情况下可以正常工作。自 Electron 12 起,此属性已默认启用。

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

默认更改:nativeWindowOpen 默认值为 true

在 Electron 14 之前,window.open 默认被垫片以使用 BrowserWindowProxy。 这意味着 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-windowdid-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 模块

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

API 变更

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

移除/弃用变更

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

  • remote 模块在 Electron 12 中已弃用后已被移除。#25734
  • 子窗口不再从其父窗口继承 BrowserWindow 构造选项。 #28550
  • 移除了 new-windowdid-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 未来版本中计划的重大更改的信息,请参阅我们的 计划中的重大更改