跳到主要内容

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 的公开时间表。此外,Electron 将把支持的版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月。有关 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`

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

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

已移除:Browser Window Affinity

构造新的 BrowserWindow 时的 `affinity` 选项已被移除,这是我们计划更紧密地与 Chromium 的进程模型保持一致,以提高安全性、性能和可维护性的一部分。

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

API 已更改:`window.open()`

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

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

已移除:`worldSafeExecuteJavaScript`

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

如果您使用 `webFrame.executeJavaScript` 或 `webFrame.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 构造选项,例如 `transparent` 和 `resizable`。从 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
  • 将 `disposition`、`referrer` 和 `postBody` 添加到传递给使用 `setWindowOpenHandler` 注册的窗口打开处理程序的 details 对象。 #28518
  • 添加了 `@electron/remote` 使用的 `process.contextId`。 #28007
  • 在 Electron Fuse 之后添加了实验性 cookie 加密支持。 #29492
  • 为 `webRequest` 侦听器详细信息添加了缺少的 `resourceType` 转换:`font`、`ping`、`cspReport`、`media`、`webSocket`。 #30050
  • 添加了新的 `session.storagePath` API,用于获取会话特定数据的磁盘路径。 #28665
  • 添加了对 macOS 上 Windows 控制叠加层的支持。 #29986
  • 添加了将 Chromium 日志定向到文件的支持,使用 `--log-file=.../path/to/file.log`。此外,现在可以通过在第一个 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.start` 的 `submitURL` 选项不再是必需的参数。 #28105

对 11.x.y 的支持已结束

根据项目的 支持政策,Electron 11.x.y 已达到支持终止日期。建议开发者和应用程序升级到较新版本的 Electron。

下一步是什么

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

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