跳到主要内容

44 篇标记为“发布”的文章

关于 Electron 新版本发布的博客文章

查看所有标签

Electron 16.0.0

·阅读时长 4 分钟

Electron 16.0.0 已发布!它包含对 Chromium 96、V8 9.6 和 Node.js 16.9.1 的升级。阅读下文了解更多详情!


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

重要变更

Electron 发布周期变更

从 Electron 15 开始,Electron 将每隔 8 周发布一个主要稳定版本。您可以在此处阅读完整详情

此外,Electron 已将支持版本从最新的三个版本更改为最新的四个版本,直至 2022 年 5 月。请参阅我们的版本控制文档,了解 Electron 版本控制的更多详细信息。2022 年 5 月之后,我们将恢复支持最新的三个版本。

技术栈变更

亮点功能

  • 现已支持 WebHID API。#30213
  • app.requestSingleInstanceLock 添加 data 参数,用于在实例之间共享数据。#30891
  • 将 securityOrigin 传递给媒体权限请求处理程序。#31357
  • 添加 commandLine.removeSwitch#30933

请参阅 16.0.0 版本发布说明,了解新功能和变更的完整列表。

重大变更

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

构建原生模块

如果您的项目使用 node-gyp 构建原生模块,根据您的项目设置和 Electron 版本,您可能需要使用 --force-process-config 调用它。有关此变更的更多信息,请参阅 #2497

行为变更:Linux 上 crashReporter 实现切换到 Crashpad

Linux 上 crashReporter API 的底层实现已从 Breakpad 更改为 Crashpad,使其与 Windows 和 Mac 保持一致。因此,子进程现在会自动受到监控,并且不再需要在 Node 子进程中调用 process.crashReporter.start(也不建议这样做,因为它会启动 Crashpad 报告程序的第二个实例)。

Linux 上报告注解的方式也有一些细微变化,包括长值将不再被拆分到附加了 __1__2 等的注解之间,而是将在(新的、更长的)注解值限制处被截断。

API 变更

Electron 16 中没有 API 变更。

移除/弃用变更

  • 在渲染器中使用 desktopCapturer.getSources API 已被弃用并将被移除。此变更提高了 Electron 应用的默认安全性。有关如何在您的应用中替换此 API 的详细信息,请参阅此处

12.x.y 版本停止支持

根据项目的支持政策,Electron 12.x.y 已停止支持。鼓励开发者和应用升级到更新的 Electron 版本。

从 Electron 15 开始,我们将支持版本从最新的三个版本更改为最新的四个版本,直至 2022 年 5 月的 Electron 19 发布。Electron 19 之后,我们将恢复支持最新的三个版本。此版本支持变更作为我们新的发布周期变更的一部分。请参阅我们的博客文章了解完整详情。

E15 (21 年 9 月)E16 (21 年 11 月)E17 (22 年 2 月)E18 (22 年 3 月)E19 (22 年 5 月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

下一步计划

短期内,您可以期待团队继续专注于跟进组成 Electron 的主要组件的开发,包括 Chromium、Node 和 V8。虽然我们谨慎承诺发布日期,但我们的计划是大约每 2 个月发布一个包含这些组件新版本的新 Electron 主要版本。

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的重大变更页面。

Electron 15.0.0

·阅读时长 4 分钟

Electron 15.0.0 已发布!它包含对 Chromium 94、V8 9.4 和 Node.js 16.5.0 的升级。我们添加了对 window.open 的 API 更新、错误修复和一般改进。阅读下文了解更多详情!


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

重要变更

Electron 发布周期变更

从 Electron 15 开始,Electron 将每隔 8 周发布一个主要稳定版本。您可以在此处阅读完整详情

此外,Electron 将支持版本从最新的三个版本更改为最新的四个版本,直至 2022 年 5 月。请参阅我们的版本控制文档,了解 Electron 版本控制的更多详细信息。

技术栈变更

亮点功能

  • nativeWindowOpen: true 不再是实验性功能,现在是默认值。
  • 添加了 safeStorage 字符串加密 API。#30430
  • WebContents 添加了 'frame-created' 事件,该事件在页面中创建 frame 时触发。#30801
  • BrowserWindowwill-resize 事件添加了 resize 的 edge 信息。#29199

请参阅 15.0.0 版本发布说明,了解新功能和变更的完整列表。

重大变更

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

默认值变更:nativeWindowOpen 默认为 true

在 Electron 15 之前,window.open 默认通过 shim 实现,使用 BrowserWindowProxy。这意味着 window.open('about:blank') 无法打开可同步脚本化的子窗口,以及存在其他不兼容性。nativeWindowOpen: true 不再是实验性功能,现在是默认值。

请参阅 Electron 中window.open 的文档,了解更多详情。

API 变更

  • WebContents 添加了 'frame-created' 事件,该事件在页面中创建 frame 时触发。#30801
  • 添加了 safeStorage 字符串加密 API。#30430
  • dialog.showMessageBox 添加了 signal 选项。#26102
  • 为对您的应用加载的 app.asar 文件强制执行代码签名添加了一个Electron Fuse。需要最新的 asar 模块(v3.1.0 或更高版本)。#30900
  • 添加了用于在打包应用中禁用 NODE_OPTIONS--inspect 调试参数的 fuses。#30420
  • 添加了新的 MenuItem.userAccelerator 属性,用于读取用户分配的 macOS 加速器覆盖。#26682
  • 添加了新的 app.runningUnderARM64Translation 属性,用于检测在 Apple Silicon 上的 Rosetta 或 Windows for ARM 上的 WOW 下运行时的情况。#29168
  • 添加了新的 imageAnimationPolicy web preference,用于控制图像的动画方式。#29095
  • 添加了通过上下文桥发送 Blob 的支持。#29247

移除/弃用变更

没有 API 被移除或弃用。

支持的版本

从 Electron 15 开始,我们将支持版本从最新的三个版本更改为最新的四个版本,直至 2022 年 5 月的 Electron 19 发布。Electron 19 之后,我们将恢复支持最新的三个版本。此版本支持变更作为我们新的发布周期变更的一部分。请参阅我们的博客文章了解完整详情。

鼓励开发者和应用升级到更新的 Electron 版本。

E15 (21 年 9 月)E16 (21 年 11 月)E17 (22 年 2 月)E18 (22 年 3 月)E19 (22 年 5 月)
15.x.y16.x.y17.x.y18.x.y19.x.y
14.x.y15.x.y16.x.y17.x.y18.x.y
13.x.y14.x.y15.x.y16.x.y17.x.y
12.x.y13.x.y14.x.y15.x.y--

下一步计划

短期内,您可以期待团队继续专注于跟进组成 Electron 的主要组件的开发,包括 Chromium、Node 和 V8。虽然我们谨慎承诺发布日期,但我们的计划是大约每季度发布一个包含这些组件新版本的新 Electron 主要版本。

您可以在此处找到 Electron 的公开时间线

有关未来变更的更多信息,请参阅计划中的重大变更页面。

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 的 beta 版将于 2021 年 9 月 1 日开始,稳定版将于 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

已移除:浏览器窗口亲和性

在构造新的 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 默认通过 shim 实现,使用 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 的键形式出现在 options 对象中。

// 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
  • 为传递给使用 setWindowOpenHandler 注册的窗口打开处理程序的 details 对象添加了 dispositionreferrerpostBody#28518
  • 添加了由 @electron/remote 使用的 process.contextId#28007
  • Electron Fuse 后添加了实验性 cookie 加密支持。#29492
  • webRequest 监听器详情添加了缺失的 resourceType 转换:fontpingcspReportmediawebSocket#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 已移除或现已弃用

  • 在 Electron 12 中已弃用的 remote 模块现已移除。#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 版本中的计划重大变更信息,请参阅我们的计划中的重大变更

新的 Electron 发布周期

·阅读时长 6 分钟

从 2021 年 9 月开始,Electron 将每隔 8 周发布一个主要稳定版本。


2019 年,Electron 切换到 12 周发布周期,以匹配 Chromium 的 6 周发布周期。最近,Chrome 和 Microsoft 都宣布了一些变更,促使我们重新考虑 Electron 当前的发布周期

  1. Chromium 计划从 2021 年 9 月 21 日的 Chrome 94 开始,每 4 周发布一个新的里程碑版本。此发布周期还会每 8 周增加一个新的 Extended Stable 选项,其中将包含所有更新的安全修复程序。

  2. Microsoft Store 将要求基于 Chromium 的应用不得超过最近的 2 个主要版本。例如,如果 Chromium 的最新主要版本是 85,则任何基于 Chromium 的浏览器必须至少是 Chromium 版本 83 或更高。此规则包括 Electron 应用。

从 2021 年 9 月开始,Electron 将每隔 8 周发布一个主要稳定版本,以匹配 Chromium 的 8 周 Extended Stable 发布周期。

我们的第一个包含 Chromium Extended Stable 的版本将是 Electron 15,发布日期为 2021 年 9 月 21 日

考虑到发布周期的变更会影响其他下游应用,我们希望尽快告知我们的开发者社区。请继续阅读,了解我们 2021 年发布计划的更多详情。

Electron 15:临时 Alpha 版本

鉴于我们最初的 Electron 15 版本针对的是非 Extended Stable 版本(Chromium 的 Extended Stable 版本基于其偶数版本),我们需要更改我们最初的目标发布日期。然而,Electron 应用必须使用 Chromium 的最近 2 个主要版本才能被 Microsoft Store 接受,这使得等待两个 Chromium 版本变得不可行。

面对这两个要求,我们的团队面临了一个时间上的困境。将 Electron 15 移至包含 Chromium M94 将使应用开发者能够使用 Chromium 的第一个 Extended Stable 版本;然而,这也会将 beta 到 stable 的周期缩短到仅 3 周。

为了帮助实现此切换,Electron 将提供一个临时的 alpha 构建版本,仅针对 Electron 15 版本。此 alpha 构建版本将使开发者有更多时间测试和计划 Electron 15 的发布,并且比我们当前的 nightly 构建版本更稳定。

针对 Electron 15 的 alpha 通道构建版本将于 2021 年 7 月 20 日发布。它将于 2021 年 9 月 1 日过渡到 beta 版本,稳定版本的发布目标日期为 2021 年 9 月 21 日。后续的 Electron 版本将不再有 alpha 版本。

2021 年发布计划

以下是我们的 2021 年发布计划

ElectronChromeAlpha 发布Beta 发布稳定版发布稳定版周期 (周)
E13M91-2021-Mar-052021-May-2512
E14M93-2021-May-262021-Aug-3114
E15M942021-Jul-202021-Sep-012021-Sep-219 (包含 alpha 版)
E16M96-2021-Sep-222021-Nov-168
E17M98-2021-Nov-172022-Feb-0111

增加 alpha 通道将 Electron 15 发布前的开发时间从 3 周延长到 9 周——这更接近我们新的 8 周周期,同时仍满足 Windows Store 的提交要求。

为了进一步帮助应用开发者,从 2021 年剩余时间到 2022 年 5 月,我们还将把 Electron 的支持版本政策从最新的 3 个版本扩展到最新的 4 个版本。这意味着即使您无法立即更改升级计划,旧版本的 Electron 仍将获得安全更新和修复。

解答疑问

我们在这个发布周期更改计划实施之前很久就发布这篇文章是有原因的。我们知道更快的发布周期将对 Electron 应用产生实际影响——其中一些应用可能已经觉得我们的主要版本发布节奏很快了。

我们在下方尝试解答了一些常见疑问

❓ 为什么要进行这项更改?为什么不维持 12 周的发布节奏?

为了在 Electron 中提供最新版本的 Chromium,我们的发布计划需要紧随其后。有关 Chromium 发布周期的更多信息可以在此处找到。

此外,当前的 12 周发布节奏无法满足 Microsoft Store 的新提交要求。即使是使用最新稳定版 Electron 的应用,也可能面临大约两周的时间段,在此期间其应用可能会因新的安全要求而被拒绝。

每个新的 Chromium 版本都包含新功能、错误修复/安全修复以及 V8 改进。我们希望您作为应用开发者能够及时获得这些更改,因此我们的稳定版发布日期将继续与 Chromium 的每个稳定版发布日期保持一致。作为应用开发者,您将比以前更早地获得新的 Chromium 和 V8 功能及修复。

❓ 现有的 12 周发布计划已经很快了。团队正在采取哪些措施来简化升级?

更频繁发布的优势之一是版本会更小。我们理解升级 Electron 的主要版本可能很困难。我们希望更小的版本在每次发布时引入的主要 Chromium 和 Node 更改以及破坏性更改会更少。

❓ 未来的 Electron 版本会有 alpha 版发布吗?

目前没有计划支持永久的 alpha 版本。本次的 alpha 版仅针对 Electron 15,作为在缩短的发布周期内帮助开发者更容易升级的一种方式。

❓ Electron 会延长支持的版本数量吗?

我们将把 Electron 的支持版本政策从最新的三个版本扩展到最新的四个版本,直到 2022 年 5 月,届时将发布 Electron 19。Electron 19 发布后,我们将恢复支持最新的三个主要版本,以及 beta 和 nightly 版本。

E13 (May'21)E14 (Aug'21)E15 (21 年 9 月)E16 (21 年 11 月)E17 (22 年 2 月)E18 (22 年 3 月)E19 (22 年 5 月)
13.x.y14.x.y15.x.y16.x.y17.x.y18.x.y19.x.y
12.x.y13.x.y14.x.y15.x.y16.x.y17.x.y18.x.y
11.x.y12.x.y13.x.y14.x.y15.x.y16.x.y17.x.y
----12.x.y13.x.y14.x.y15.x.y--

有问题?

📨 如果您有疑问或顾虑,请发送邮件至 info@electronjs.org加入我们的 Discord。我们知道这是一项会影响许多应用和开发者的改变,您的反馈对我们非常重要。我们期待听到您的声音!

Electron 13.0.0

·3 分钟阅读

Electron 13.0.0 已发布!其中包含对 Chromium 91 和 V8 9.1 的升级。我们添加了几项 API 更新、错误修复和整体改进。请阅读下方了解更多详情!


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

重要变更

技术栈变更

亮点功能

  • 添加了 process.contextIsolated 属性,指示当前渲染器上下文是否启用了 contextIsolation#28252
  • 添加了新的 session.storagePath API,用于获取会话特定数据的磁盘路径。#28866
  • 弃用了 WebContentsnew-window 事件。它已被 webContents.setWindowOpenHandler() 取代。
  • 添加了 `@electron/remote` 使用的 `process.contextId`。#28251

请参阅 13.0.0 发布说明以获取新功能和更改的完整列表。

重大变更

  • window.open() 参数 frameName 不再设置为窗口标题。#27481
  • 更改了 session.setPermissionCheckHandler(handler) 以允许 handler 的第一个参数 webContentsnull#19903

有关这些和未来更改的更多信息可以在计划中的破坏性更改页面找到。

API 变更

  • 为 `BrowserWindow` 添加了 `roundedCorners` 选项。#27572
  • 添加了新的 `session.storagePath` API,用于获取会话特定数据的磁盘路径。28866
  • 添加了通过 context bridge 传递 DOM 元素的支持。#26776
  • 为沙盒渲染器添加了 `process.uptime()`。#26684
  • 为作为 `context-menu` 事件一部分发出的参数添加了缺失的字段。#26788
  • 添加了对注册 Manifest V3 扩展 Service Worker 的支持。
  • 为 Service Worker 添加了 ‘registration-completed’ 事件。#27562

移除/弃用变更

以下 API 已移除或现已弃用

  • 弃用了 WebContentsnew-window 事件。它已被 webContents.setWindowOpenHandler() 取代。

  • 移除了已弃用的 `shell.moveItemToTrash()`。#26723

  • 移除了以下已弃用的 `BrowserWindow` 扩展 API

    • BrowserWindow.addExtension(path)
    • BrowserWindow.addDevToolsExtension(path)
    • BrowserWindow.removeExtension(name)
    • BrowserWindow.removeDevToolsExtension(name)
    • BrowserWindow.getExtensions()
    • BrowserWindow.getDevToolsExtensions()

    请改为使用 `session` API

    • ses.loadExtension(path)
    • ses.removeExtension(extension_id)
    • ses.getAllExtensions()
  • 以下 `systemPreferences` 方法已被弃用

    • systemPreferences.isDarkMode()
    • systemPreferences.isInvertedColorScheme()
    • systemPreferences.isHighContrastColorScheme()

    请改为使用以下 `nativeTheme` 属性

    • nativeTheme.shouldUseDarkColors
    • nativeTheme.shouldUseInvertedColorScheme
    • nativeTheme.shouldUseHighContrastColors

10.x.y 版本停止支持

根据项目的支持政策,Electron 10.x.y 版本已停止支持。鼓励开发者和应用升级到更新版本的 Electron。

下一步计划

短期内,您可以预期团队将继续专注于跟进构成 Electron 的主要组件的开发,包括 Chromium、Node 和 V8。尽管我们谨慎地不对发布日期作出承诺,但我们的计划是大约每季度发布包含这些组件新版本的新 Electron 主要版本。暂定的 14.0.0 计划列出了 Electron 14.0 开发生命周期中的关键日期。此外,有关 Electron 版本控制的更详细信息,请参阅我们的版本控制文档

有关未来 Electron 版本中计划的破坏性更改的信息,请参阅我们的计划中的破坏性更改文档

Electron 12.0.0

·5 分钟阅读

Electron 12.0.0 已发布!其中包含对 Chromium 89、V8 8.9 和 Node.js 14.16 的升级。我们对 remote 模块进行了更改,设置了 contextIsolation 的新默认值,添加了新的 webFrameMain API,以及其他整体改进。请阅读下方了解更多详情!


Electron 团队很高兴宣布 Electron 12.0.0 已发布!您可以通过 npm 使用 npm install electron@latest 命令安装,或从我们的发布网站下载。此版本包含了升级、修复以及对 Apple 的 M1 硬件的新支持。

重要变更

技术栈变更

亮点功能

  • ContextBridge 的 exposeInMainWorld 方法现在可以暴露非对象 API。#26834
  • 从 Node 12 升级到 Node 14。#23249
  • 添加了新的 webFrameMain API,用于从主进程访问 WebContents 实例的子帧。#25464
  • contextIsolationworldSafeExecuteJavaScript 的默认值现在为 true#27949 #27502

请参阅 12.0.0 发布说明以获取新功能和更改的完整列表。

重大变更

有关这些和未来更改的更多信息可以在计划中的破坏性更改页面找到。

API 变更

  • 添加了 `webFrameMain` API:`webFrameMain` 模块可用于查找现有 WebContents 实例中的帧。这是现有 webFrame API 在主进程中的对应功能。有关此新 API 的更多信息,可以在此处和我们的文档中找到。
  • `app` API 变更
    • 为 `'child-process-gone'` / `app.getAppMetrics()` 添加了非本地化的 `serviceName`。#25975
    • 添加了新的 `app.runningUnderRosettaTranslation` 属性,用于检测在 Apple 芯片上是否运行在 rosetta 翻译层下。#26444
    • 为 `render-process-gone` 详情 (app & webContents) 添加了 `exitCode`。#27677
  • `BrowserWindow` API 变更
    • 添加了 `BrowserWindow.isTabletMode()` API。#25209
    • 为 `BrowserWindow` 添加了 `resized` (Windows/macOS) 和 `moved` (Windows) 事件。#26216
    • 添加了新的 `system-context-menu` 事件,允许阻止和覆盖系统上下文菜单。#25795
    • 添加了 `win.setTopBrowserView()` 以使 `BrowserView` 可以被置于顶部。#27713
    • 添加了 `webPreferences.preferredSizeMode`,允许根据文档的最小尺寸调整视图大小。#25874
  • `contextBridge` API 变更
    • 允许 ContextBridge 的 `exposeInMainWorld` 方法暴露非对象 API。#26834
  • `display` API 变更
    • 为 `Display` 对象添加了 `displayFrequency` 属性,允许在 Windows 上获取刷新率信息。#26472
  • `extensions` API 变更
    • 添加了对部分 `chrome.management` API 的支持。#25098
  • `MenuItem` API 变更
    • 添加了对显示 macOS 分享菜单的支持。#25629
  • `net` API 变更
    • 为 `net.request()` 添加了新的 `credentials` 选项。#25284
    • 添加了 `net.online`,用于检测当前是否有互联网连接。#21004
  • `powerMonitor` API 变更
    • 添加了 `powerMonitor.onBatteryPower`。#26494
    • 为 macOS 上的 powerMonitor 添加了快速用户切换事件。#25321
  • `session` API 变更
    • 为 `ses.loadExtension()` API 添加了 `allowFileAccess` 选项。#27702
    • 为 `session.setPermissionRequestHandler` 添加了 `display-capture` API。#27696
    • 为 `session.setSSLConfig` 添加了 `disabledCipherSuites` 选项。#25818
    • 为 `session` 添加了 `extension-loaded`、`extension-unloaded` 和 `extension-ready` 事件。#25385
    • 添加了 `session.setSSLConfig()` 以允许配置 SSL。#25461
    • 为 `session.setProxy()` 添加了对显式指定 `direct`、`auto_detect` 或 `system` 模式的支持。#24937
    • 添加了对 Serial API 的支持。#25237
    • 添加了用于启用/禁用拼写检查器的 API。#26276
  • `shell` API 变更
    • 添加了新的异步 `shell.trashItem()` API,取代了同步的 `shell.moveItemToTrash()`。#25114
  • `webContents` API 变更
    • 为控制台添加了一个小的控制台提示,以帮助调试渲染器崩溃。#25317
    • 为 webRequest handlers 中的 details 对象添加了 `frame` 和 `webContents` 属性。#27334
    • 添加了 `webContents.forcefullyCrashRenderer()`,用于强制终止渲染器进程,以协助恢复无响应的渲染器。#25580
    • 为渲染器创建的子窗口添加了 `setWindowOpenHandler` API,并弃用了 `new-window` 事件。#24517
  • `webFrame` API 变更
    • 为渲染器添加了 spellcheck API。#25060

移除/弃用变更

以下 API 已移除或现已弃用

  • 弃用了 `remote` 模块。它已被 @electron/remote 取代。#25293
  • 移除了已弃用的 `crashReporter` API。#26709
  • 从打包应用的默认“帮助”菜单中移除了指向 Electron 网站的链接。#25831

9.x.y 版本停止支持

根据项目的支持政策,Electron 9.x.y 版本已停止支持。鼓励开发者和应用升级到更新版本的 Electron。

下一步计划

短期内,您可以预期团队将继续专注于跟进构成 Electron 的主要组件的开发,包括 Chromium、Node 和 V8。尽管我们谨慎地不对发布日期作出承诺,但我们的计划是大约每季度发布包含这些组件新版本的新 Electron 主要版本。暂定的 13.0.0 计划列出了 Electron 13.0 开发生命周期中的关键日期。此外,有关 Electron 版本控制的更详细信息,请参阅我们的版本控制文档

有关未来 Electron 版本中计划的破坏性更改的信息,请参阅我们的计划中的破坏性更改文档

Electron 11.0.0

·阅读时长 4 分钟

Electron 11.0.0 已发布!其中包含对 Chromium 87、V8 8.7 和 Node.js 12.18.3 的升级。我们添加了对 Apple silicon 的支持,以及其他整体改进。请阅读下方了解更多详情!


Electron 团队很高兴宣布 Electron 11.0.0 已发布!您可以通过 npm 使用 npm install electron@latest 命令安装,或从我们的发布网站下载。此版本包含了升级、修复以及对 Apple M1 硬件的新支持。

我们迫不及待地想看看您将用它们构建出什么!请继续阅读了解此版本的详细信息,并请分享您的任何反馈!

重要变更

技术栈变更

亮点功能

  • 支持 Apple M1:11 月 10 日,Apple 发布了他们的新 M1 芯片,将包含在他们即将推出的硬件中。从 Electron 11 开始,Electron 将为 Intel Mac (x64) 和 Apple 即将推出的 M1 硬件 (arm64) 发布不同的 Electron 版本。您可以在此处了解如何让您的 Electron 应用在 Apple 的 M1 硬件上运行。#24545
  • 为 crashReport 参数添加了 V8 崩溃消息和位置信息。#24771
  • 提高了通过 context bridge 发送宽对象的性能。#24671

请参阅 11.0.0 发布说明以获取新功能和更改的完整列表。

重大变更

  • 移除了实验性 API:`BrowserView.{fromId, fromWebContents, getAllViews}` 以及 `BrowserView` 的 `id` 属性。#23578

有关这些和未来更改的更多信息可以在计划中的破坏性更改页面找到。

API 变更

  • 添加了 `app.getApplicationInfoForProtocol()` API,返回处理特定协议的应用的详细信息。#24112
  • 添加了 `app.createThumbnailFromPath()` API,根据文件路径和最大缩略图大小返回文件的预览图像。#24802
  • 添加了 `webContents.forcefullyCrashRenderer()`,用于强制终止渲染器进程,以协助恢复无响应的渲染器。#25756

8.x.y 版本停止支持

根据项目的支持政策,Electron 8.x.y 版本已停止支持。鼓励开发者和应用升级到更新版本的 Electron。

下一步计划

短期内,您可以预期团队将继续专注于跟进构成 Electron 的主要组件的开发,包括 Chromium、Node 和 V8。尽管我们谨慎地不对发布日期作出承诺,但我们的计划是大约每季度发布包含这些组件新版本的新 Electron 主要版本。暂定的 12.0.0 计划列出了 Electron 12.0 开发生命周期中的关键日期。此外,有关 Electron 版本控制的更详细信息,请参阅我们的版本控制文档

有关未来 Electron 版本中计划的破坏性更改的信息,请参阅我们的计划中的破坏性更改文档

继续推进弃用 remote 模块的工作

我们从 Electron 9 开始着手移除 remote 模块。我们计划在 Electron 14 中移除 remote 模块本身。

请阅读并关注此问题以获取完整的弃用计划和详情。

要求原生 Node 模块必须支持上下文感知或 N-API 的最后一步(在 Electron 12 中)

从 Electron 6 开始,我们一直在为要求在渲染器进程中加载的原生 Node 模块必须是 N-API上下文感知 (Context Aware) 模块奠定基础。强制执行此更改可以提高安全性、加快性能并减少维护工作量。此计划的最后一步是在 Electron 12 中移除禁用渲染器进程重用的能力。

请阅读并关注此问题以获取完整详情,包括拟议的时间表。

Electron 10.0.0

·5 分钟阅读

Electron 10.0.0 已发布!其中包含对 Chromium 85、V8 8.5 和 Node.js 12.16 的升级。我们添加了几项新的 API 集成和改进。请阅读下方了解更多详情!


Electron 团队很高兴宣布 Electron 10.0.0 已发布!您可以通过 npm 使用 npm install electron@latest 命令安装,或从我们的发布网站下载。此版本包含了升级、修复和新功能。

在 Electron 10 版本中,我们还对发布说明进行了更改。为了更容易区分 Electron 10 中的全新内容以及 Electron 10 与之前版本之间的可能更改,我们现在还包含了一些在 Electron 10 中引入但已回溯到之前版本的更改。我们希望这能让应用在升级 Electron 时更容易找到新功能和错误修复。

我们迫不及待地想看看您将用它们构建出什么!请继续阅读了解此版本的详细信息,并请分享您的任何反馈!

重要变更

技术栈变更

亮点功能

  • 添加了 `contents.getBackgroundThrottling()` 方法和 `contents.backgroundThrottling` 属性。[#21036]
  • 在主进程中暴露了 `desktopCapturer` 模块。#23548
  • 现在可以通过调用 `ses.isPersistent()` API 检查给定的 `session` 是否持久。#22622
  • 解决了由于网络 IP 地址更改和 ICE 导致 RTC 调用无法连接的网络问题。(Chromium issue 1113227)。#24998

请参阅 10.0.0 发布说明以获取新功能和更改的完整列表。

重大变更

  • 将 `enableRemoteModule` 的默认值更改为 `false`。#22091
    • 这是我们弃用 `remote` 模块并将其移至用户空间计划的一部分。您可以阅读并关注此问题,其中详细说明了原因并包含了拟议的弃用时间表。
  • 将 `app.allowRendererProcessReuse` 的默认值更改为 `true`。#22336 (也在Electron 9 中)
    • 这将阻止在渲染器进程中加载非上下文感知的原生模块。
    • 您可以阅读并关注此问题,其中详细说明了原因并包含了拟议的弃用时间表。
  • 修复了当操作系统语言环境设置为 RTL 语言(如阿拉伯语或希伯来语)时,macOS 上窗口按钮的位置问题。无边框窗口应用在样式设置时可能需要考虑此更改。#22016

有关这些和未来更改的更多信息可以在计划中的破坏性更改页面找到。

API 变更

  • Session:现在可以通过调用 `ses.isPersistent()` API 检查给定的 `session` 是否持久。#22622
  • Contents:添加了 `contents.getBackgroundThrottling()` 方法和 `contents.backgroundThrottling` 属性。#21036

已弃用的 API

以下 API 现已弃用或移除

  • 移除了 `netLog` 已弃用的 `currentlyLoggingPath` 属性。此外,`netLog.stopLogging` 不再返回记录日志的路径。#22732
  • 弃用了 `crashReporter` 中未压缩的崩溃上传。#23598

7.x.y 版本停止支持

根据项目的支持政策,Electron 7.x.y 版本已停止支持。鼓励开发者和应用升级到更新版本的 Electron。

下一步计划

短期内,您可以预期团队将继续专注于跟进构成 Electron 的主要组件的开发,包括 Chromium、Node 和 V8。尽管我们谨慎地不对发布日期作出承诺,但我们的计划是大约每季度发布包含这些组件新版本的新 Electron 主要版本。暂定的 11.0.0 计划列出了 Electron 11.0 开发生命周期中的关键日期。此外,有关 Electron 版本控制的更详细信息,请参阅我们的版本控制文档

有关未来 Electron 版本中计划的破坏性更改的信息,请参阅我们的计划中的破坏性更改文档

继续推进弃用 remote 模块的工作(在 Electron 11 中)

我们从 Electron 9 开始着手移除 remote 模块,并且正在继续计划移除 remote 模块。在 Electron 11 中,我们计划像在 Electron 10 中那样继续重构以实现 WeakRef。请阅读并关注此问题以获取完整的弃用计划和详情。

要求原生 Node 模块必须支持上下文感知或 N-API 的最后一步(在 Electron 12 中)

编辑:最初,这篇博文曾提到我们将在 Electron 11 中禁用渲染器进程重用。禁用渲染器进程重用现已推迟到 Electron 12。

从 Electron 6 开始,我们一直在为要求在渲染器进程中加载的原生 Node 模块必须是 N-API上下文感知 (Context Aware) 模块奠定基础。强制执行此更改可以提高安全性、加快性能并减少维护工作量。此计划的最后一步是在 Electron 12 中移除禁用渲染器进程重用的能力。阅读此问题以获取包括拟议时间表在内的完整详情。

Electron 9.0.0

·阅读时长 4 分钟

Electron 9.0.0 已发布!其中包含对 Chromium 83、V8 8.3 和 Node.js 12.14 的升级。我们为拼写检查器功能添加了几项新的 API 集成,启用了 PDF 查看器,以及更多内容!


Electron 团队激动地宣布 Electron 9.0.0 版本正式发布!您可以通过 npm 安装最新版本:npm install electron@latest,或从我们的版本发布网站下载。新版本带来了诸多升级、修复和新特性。我们迫不及待想看到您用它们构建出什么杰作!请继续阅读了解此版本的详细信息,并欢迎提供任何反馈!

重要变更

技术栈变更

亮点功能

  • 拼写检查功能的多项改进。更多详情请参阅#22128#22368
  • 提高了 Linux 上窗口事件处理程序的效率。#23260
  • 启用 PDF 查看器。#22131

有关所有新功能和更改的完整列表,请参阅9.0.0 发布说明

重大变更

  • 在没有设置 enableRemoteModule: true 的情况下使用 remote 时会发出弃用警告。#21546
    • 这是我们将弃用 remote 模块并将其移至用户空间计划的第一步。您可以阅读并关注此议题,其中详细说明了我们这样做的原因,并包含了提议的弃用时间表。
  • app.enableRendererProcessReuse 默认为 true。#22336
  • 现在通过 IPC 发送非 JavaScript 对象会抛出异常。#21560
    • 此行为在 Electron 8.0 中已弃用。在 Electron 9.0 中,旧的序列化算法已被移除,现在发送此类非可序列化对象将抛出“对象无法克隆”错误。

有关这些和未来更改的更多信息可以在计划中的破坏性更改页面找到。

API 变更

  • `shell` API 变更
    • shell.openItem API 已被异步的 shell.openPath API 取代。提案
  • session API 更改
    • 新增 session.listWordsFromSpellCheckerDictionary API 用于列出字典中的自定义单词。#22128
    • 新增 session.removeWordFromSpellCheckerDictionary API 用于移除字典中的自定义单词。#22368
    • 新增 session.serviceWorkerContext API 用于访问基本的 Service Worker 信息并接收 Service Worker 的控制台日志。#22313
  • `app` API 变更
    • 在 macOS 上为 app.focus() 添加了一个新的 force 参数,允许应用程序强制获取焦点。#23447
  • `BrowserWindow` API 变更
    • BrowserWindow 上的某些 getter/setter 对添加了属性访问支持。#23208

已弃用的 API

以下 API 现已弃用或移除

  • shell.openItem API 现已弃用,并被异步的 shell.openPath API 取代。
  • <webview>.getWebContents(在 Electron 8.0 中已弃用)现已移除。
  • webFrame.setLayoutZoomLevelLimits(在 Electron 8.0 中已弃用)现已移除。

结束对 6.x.y 版本的支持

根据项目的支持政策,Electron 6.x.y 已结束支持。建议开发者和应用程序升级到更新版本的 Electron。

下一步计划

短期内,您可以期待团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发进度。尽管我们谨慎地不对发布日期做出承诺,但我们的计划是大约每季度发布一个包含这些组件新版本的 Electron 主要版本。Electron 10.0.0 暂定时间表 列出了 Electron 10.0 开发生命周期中的关键日期。此外,请参阅我们的版本控制文档,了解有关 Electron 版本控制的更详细信息。

有关未来 Electron 版本中计划的破坏性更改的信息,请参阅我们的计划中的破坏性更改文档

contextIsolation 的默认值从 false 更改为 true (从 Electron 10 开始)

如果没有上下文隔离(contextIsolation),在渲染器进程中运行的任何代码都可以非常容易地访问 Electron 内部或应用程序的预加载脚本。然后,该代码可以执行 Electron 希望限制的特权操作。

更改此默认设置提高了 Electron 应用程序的默认安全性,因此应用程序需要明确选择不安全的行为。Electron 将在 Electron 10.0 中弃用当前的 contextIsolation 默认值,并在 Electron 12.0 中更改为新的默认值(true)。

有关 contextIsolation、如何轻松启用它及其安全优势的更多信息,请参阅我们的专用上下文隔离文档

Electron 8.0.0

·阅读时长 6 分钟

Electron 8.0.0 已发布!它包括对 Chromium 80、V8 8.0 和 Node.js 12.13.0 的升级。我们添加了 Chrome 内置拼写检查器,以及更多功能!


Electron 团队激动地宣布 Electron 8.0.0 版本正式发布!您可以通过 npm 安装最新版本:npm install electron@latest,或从我们的版本发布网站下载。新版本带来了诸多升级、修复和新特性。我们迫不及待想看到您用它们构建出什么杰作!请继续阅读了解此版本的详细信息,并欢迎提供任何反馈!

重要变更

技术栈变更

亮点功能

  • 实现了 Chrome 内置拼写检查功能的使用。更多详情请参阅#20692#21266
  • IPC 通信现在使用 v8 的结构化克隆算法(Structured Clone Algorithm)。这比现有逻辑更快、功能更丰富,并且更易于理解,对于大型缓冲区和复杂对象,性能提升了 2 倍。对小消息的延迟影响不显著。更多详情请参阅#20214

有关所有新功能和更改的完整列表,请参阅8.0.0 发布说明

重大变更

  • 在上下文感知模块的弃用警告中显示模块名称。#21952
  • 通过 IPC 发送的值现在使用结构化克隆算法进行序列化。#20214
  • 离屏渲染(Offscreen Rendering)目前已禁用,因为缺乏维护者来处理此功能。它在 Chromium 升级期间出现问题,随后被禁用。#20772

有关这些和未来更改的更多信息可以在计划中的破坏性更改页面找到。

API 变更

  • `app` API 变更
    • 新增 app.getApplicationNameForProtocol(url)#20399
    • 在 Windows 上新增 app.showAboutPanel()app.setAboutPanelOptions(options) 支持。#19420
  • `BrowserWindow` API 变更
    • 更新了文档,指出 BrowserWindow 的 hasShadow 选项在所有平台上都可用。#20038
    • 新增 trafficLightPosition 选项到 BrowserWindow 选项,允许自定义交通灯按钮的位置。#21781
    • 新增 accessibleTitle 选项到 BrowserWindow,用于设置可访问的窗口标题。#19698
    • BrowserWindow.fromWebContents() 现在可能返回 null。#19983
    • 新增 BrowserWindow.getMediaSourceId()BrowserWindow.moveAbove(mediaSourceId)#18926
    • 在 macOS 上新增对 will-move 事件的支持。#19641
  • 记录了之前未记录的 crashReporter.getCrashesDirectory()#20417
  • dialog API 更改
    • dialog.showOpenDialogdialog.showOpenDialogSync 添加了 dontAddToRecent 属性,以防止文档在 Windows 的打开对话框中被添加到最近文档列表。#19669
    • dialog.showSaveDialogdialog.showSaveDialogSync 添加了属性自定义。#19672
  • Notification API 更改
    • 新增 timeoutType 选项,允许 Linux/Windows 用户设置通知超时类型。#20153
    • 新增 urgency 选项,用于设置 Linux 通知紧急程度。#20152
  • `session` API 变更
    • 更新了关于 session.setProxy(config)session.setCertificateVerifyProc(proc) 的文档,注明可选参数。#19604
    • 新增 session.downloadURL(url),允许在没有 BrowserWindow 的情况下触发下载。#19889
    • 通过 session.preconnect(options)preconnect 事件新增对 HTTP 预连接资源提示的支持。#18671
    • 新增 session.addWordToSpellCheckerDictionary,允许在字典中添加自定义单词。#21297
  • 在 macOS 上为 shell.moveItemToTrash(fullPath[, deleteOnFail]) 添加了选项,用于指定 moveItemToTrash 失败时的行为。#19700
  • systemPreferences API 更改
    • 更新了关于 macOS 上 systemPreferences.getColor(color) 的文档。#20611
    • systemPreferences.getMediaAccessStatus() 添加了 screen 媒体类型。#20764
  • 新增 nativeTheme.themeSource,允许应用程序覆盖 Chromium 和操作系统的配色主题选择。#19960
  • TouchBar API 更改
    • TouchBarButtonTouchBarLabel 添加了 accessibilityLabel 属性,以提高 TouchBarButton/TouchBarLabel 的可访问性。#20454
    • 更新了与 TouchBar 相关的文档。#19444
  • tray API 更改
    • tray.displayBalloon() 添加了新选项:iconTypelargeIconnoSoundrespectQuietTime#19544
    • 新增 tray.removeBalloon(),用于移除已显示的气泡通知。#19547
    • 新增 tray.focus(),用于将焦点返回到任务栏通知区域。feat: add tray.focus() #19548
  • `webContents` API 变更
    • 新增 contents.executeJavaScriptInIsolatedWorld(worldId, scripts[, userGesture]),用于在 webContents API 上暴露 executeJavaScriptInIsolatedWorld 方法。#21190
    • 新增捕获隐藏 webContents 的方法。#21679
    • webContents.print([options], [callback]) 添加了选项,以启用打印页面页眉和页脚的自定义。#19688
    • 新增通过 webContents.getAllSharedWorkers()webContents.inspectSharedWorkerById(workerId) 检查特定 Shared Worker 的功能。#20389
    • 新增在 WebContents.printToPDF() 中支持 fitToPageEnabledscaleFactor 选项。#20436
  • 更新了 webview.printToPDF 文档,指出返回类型现在是 Uint8Array。#20505

已弃用的 API

以下 API 现已弃用

  • 在下一个主要版本移除之前,弃用 BrowserWindow.setVisibleOnAllWorkspaces 中非功能的 visibleOnFullScreen 选项。#21732
  • 弃用 macOS 上 systemPreferences.getColor(color)alternate-selected-control-text#20611
  • 弃用 webContentswebFrame<webview> Tag 上的 setLayoutZoomLevelLimits,因为 Chromium 已移除此功能。#21296
  • app.allowRendererProcessReuse 的默认值 false 现已弃用。#21287
  • 弃用 <webview>.getWebContents(),因为它依赖于 remote 模块。#20726

结束对 5.x.y 版本的支持

根据项目的支持政策,Electron 5.x.y 已结束支持。建议开发者和应用程序升级到更新版本的 Electron。

应用反馈计划

我们继续使用应用反馈计划进行测试。参与此计划的项目会在其应用程序上测试 Electron 测试版;作为回报,他们发现的新错误将被优先处理以进行稳定版本发布。如果您想参与或了解更多信息,请查看我们关于该计划的博客文章

下一步计划

短期内,您可以期待团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发进度。尽管我们谨慎地不对发布日期做出承诺,但我们的计划是大约每季度发布一个包含这些组件新版本的 Electron 主要版本。Electron 9.0.0 暂定时间表 列出了 Electron 9 开发生命周期中的关键日期。此外,请参阅我们的版本控制文档,了解有关 Electron 版本控制的更详细信息。

有关未来 Electron 版本中计划的破坏性更改的信息,请参阅我们的计划中的破坏性更改文档

弃用 remote 模块 (从 Electron 9 开始)

由于严重的安全隐患,我们开始计划从 Electron 9 开始弃用remote 模块。您可以阅读并关注此议题,其中详细说明了我们这样做的原因,并包含了提议的弃用时间表。