Electron 14.0.0
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 版本控制的更详细信息,请参阅我们的版本控制文档。
技术栈变更
- Chromium
93
- Node.js
14.17.0
- V8
9.3
重点功能
- 默认值变更:
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.executeJavaScript
或 webFrame.executeJavaScriptInIsolatedWorld
,将受到此变更影响。 您需要确保这些方法返回的值受 上下文桥接 API 支持,因为这些方法使用相同的值传递语义。
默认值变更:nativeWindowOpen
默认为 true
在 Electron 14 之前,window.open
默认使用 BrowserWindowProxy
填充 (shim)。 这意味着 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 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
和 BrowserWindowaffinity
选项。#26874 - 当
uploadToServer
为 false 时,crashReporter.start
的submitURL
选项不再是必需参数。#28105
11.x.y 版本终止支持
根据项目的支持政策,Electron 11.x.y 已终止支持。 鼓励开发者和应用程序升级到更新的 Electron 版本。
后续计划
短期内,您可以期待团队继续专注于跟进构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。虽然我们谨慎对待发布日期的承诺,但我们的计划是大约每季度发布包含这些组件新版本的新 Electron 主要版本。
有关即将发布的 Electron 版本中计划的重大变更的信息,请参阅我们的计划的重大变更。