Electron 14.0.0 已发布!它包含了 Chromium 93
和 V8 9.3
的升级。我们添加了几项 API 更新、bug 修复和通用改进。请继续阅读以获取更多详情!
Electron 团队很高兴地宣布 Electron 14.0.0 的发布!您可以通过 npm install electron@latest
使用 npm 进行安装,或者从我们的 发布网站 下载。请继续阅读以了解此版本的详细信息,并分享您的任何反馈!
重要变更
Electron 发布节奏变更
从 2021 年 9 月(Electron 15)开始,Electron 将每 8 周发布一个主要稳定版本。您可以 在此处阅读完整详细信息。Electron 15 将于 2021 年 9 月 1 日开始 Beta 测试,稳定发布日期为 2021 年 9 月 21 日。您可以在 此处找到 Electron 的公开时间表。此外,Electron 将支持版本从最新的三个版本更改为最新的四个版本,直到 2022 年 5 月。有关 Electron 版本控制的更多详细信息,请参阅 我们的版本控制文档。
技术栈变更
- Chromium
93
- Node.js
14.17.0
- V8
9.3
重点特性
- 默认更改:
nativeWindowOpen
现在默认为 true
。 (查看文档)
- 子窗口不再继承其父窗口的 BrowserWindow 构造选项。 #28550
- 添加了新的
session.storagePath
API,用于获取会话特定数据在磁盘上的路径。 #28665
- 添加了
process.contextId
,用于 @electron/remote
。 #28007
- 在 Electron Fuse 后面添加了实验性的 cookie 加密支持。#29492
请参阅 14.0.0 版本说明 以获取新功能和更改的完整列表。
破坏性变更
以下是 Electron 14 中引入的重大更改。有关这些更改以及未来更改的更多信息,请参阅 计划中的重大更改 页面。
已移除:app.allowRendererProcessReuse
app.allowRendererProcessReuse
属性已被移除,这是我们为了更紧密地与 Chromium 的进程模型保持一致,以提高安全性、性能和可维护性而采取的计划的一部分。
有关更多详细信息,请参阅 #18397。
已移除:BrowserWindow 亲和性
在创建新的 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
默认会通过 shim 使用 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
值的键出现在选项对象中。
webContents.on('did-create-window', (window, details) => {
if (details.additionalFeatures.includes('my-key')) {
}
});
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
- 已将
disposition
、referrer
和 postBody
添加到通过 setWindowOpenHandler
注册的窗口打开处理程序传入的详细信息对象中。#28518
- 添加了
process.contextId
,用于 @electron/remote
。 #28007
- 在 Electron Fuse 后面添加了实验性的 cookie 加密支持。#29492
- 为
webRequest
监听器详细信息添加了缺失的 resourceType
转换:font
、ping
、cspReport
、media
、webSocket
。#30050
- 添加了新的
session.storagePath
API,用于获取会话特定数据在磁盘上的路径。 #28665
- 在 macOS 上添加了对 Windows Control Overlay 的支持。 #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 未来版本中计划的重大更改的信息,请参阅我们的 计划的重大更改。