跳至主要内容

Electron 14.0.0

·阅读时长 6 分钟

Electron 14.0.0 已发布!它包含对 Chromium 93 和 V8 9.3 的升级。我们添加了一些 API 更新、错误修复和一般改进。请阅读以下内容以了解更多详细信息!


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

重大更改

Electron 发布节奏变更

从 2021 年 9 月的 Electron 15 开始,Electron 将每 8 周发布一个新的主要稳定版本。您可以阅读 完整详细信息。Electron 15 将于 2021 年 9 月 1 日开始测试版,稳定版将于 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

已移除:浏览器窗口关联性

构造新的 BrowserWindowaffinity 选项已删除,这是我们计划更紧密地与 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 模块

在 Electron 12 中已弃用,remote 模块现已从 Electron 本身中移除,并提取到一个单独的包中,@electron/remote@electron/remote 模块在主进程和渲染进程之间桥接 JavaScript 对象。这样,您就可以访问仅主进程对象,就好像它们在渲染进程中可用一样。这是对 remote 模块的直接替换。有关迁移说明和参考,请参阅 模块的自述文件

API 更改

  • 添加了 BrowserWindow.isFocusable() 方法来确定窗口是否可聚焦。 #28642
  • 添加了 WebFrameMain.visibilityState 实例属性。 #28706
  • 向传递给使用 setWindowOpenHandler 注册的窗口打开处理程序的详细信息对象添加了 dispositionreferrerpostBody#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 功能,允许上下文桥对象被变异。 #27348

移除/弃用更改

以下 API 已被移除或已弃用

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

对 11.x.y 的支持结束

根据项目的 支持策略,Electron 11.x.y 已结束支持。鼓励开发人员和应用程序升级到更新版本的 Electron。

下一步

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

有关 Electron 未来版本中计划的重大更改的信息,请参阅我们的 计划中的重大更改