跳到主要内容

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 日开始测试版,稳定版本将于 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

作为我们更紧密地与 Chromium 的安全、性能和可维护性进程模型保持一致的计划的一部分,app.allowRendererProcessReuse 属性已被删除。

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

已删除:浏览器窗口关联

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

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

API 已更改:window.open()

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

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

已删除:worldSafeExecuteJavaScript

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

如果您使用 webFrame.executeJavaScriptwebFrame.executeJavaScriptInIsolatedWorld,您将受到此更改的影响。您需要确保这些方法返回的值受上下文桥 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

已弃用的 additionalFeatures 属性已从 WebContents 的 new-windowdid-create-window 事件中移除。由于 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
  • dispositionreferrerpostBody 添加到传递给使用 setWindowOpenHandler 注册的窗口打开处理程序的 details 对象中。#28518
  • 添加了 @electron/remote 使用的 process.contextId#28007
  • Electron Fuse 后面添加了实验性的 cookie 加密支持。 #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 已被移除或现在已弃用

  • 在 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 即将发布的版本中计划的重大更改的信息,请参阅我们的计划的重大更改

WebView2 和 Electron

·6 分钟阅读

在过去的几周里,我们收到了几个关于新的 WebView2 和 Electron 之间区别的问题。

两个团队都有一个明确的目标,即使 Web 技术成为桌面上最好的技术,并且正在讨论共享的全面比较。

Electron 和 WebView2 都是快速发展且不断发展的项目。我们汇总了 Electron 和 WebView2 今天存在的相似之处和差异的简要快照。


架构概述

Electron 和 WebView2 都从 Chromium 源代码构建,用于呈现 Web 内容。严格来说,WebView2 是从 Edge 源代码构建的,但 Edge 是使用 Chromium 源代码的分支构建的。Electron 不与 Chrome 共享任何 DLL。WebView2 二进制文件与 Edge (截至 Edge 90 的稳定频道) 硬链接,因此它们共享磁盘和一些工作集。有关更多信息,请参见 常青分发模式

Electron 应用程序始终捆绑并分发它们开发时所使用的 Electron 的确切版本。WebView2 在分发方面有两个选项。您可以捆绑应用程序开发时所使用的确切 WebView2 库,也可以使用可能已存在于系统上的共享运行时版本。WebView2 为每种方法提供了工具,包括一个引导程序安装程序,以防共享运行时丢失。从 Windows 11 开始,WebView2 是内置的。

捆绑其框架的应用程序负责更新这些框架,包括次要安全版本。对于使用共享 WebView2 运行时的应用程序,WebView2 有自己的更新程序,类似于 Chrome 或 Edge,该更新程序独立于您的应用程序运行。更新应用程序的代码或其任何其他依赖项仍然是开发人员的责任,与 Electron 相同。Electron 和 WebView2 都不是由 Windows Update 管理的。

Electron 和 WebView2 都继承了 Chromium 的多进程架构,即一个主进程与一个或多个渲染器进程通信。这些进程与其他在系统上运行的应用程序完全分离。每个 Electron 应用程序都是一个单独的进程树,其中包含一个根浏览器进程、一些实用程序进程和零个或多个渲染进程。使用相同用户数据文件夹(就像一套应用程序一样)的 WebView2 应用程序共享非渲染进程。使用不同数据文件夹的 WebView2 应用程序不共享进程。

  • ElectronJS 进程模型

    ElectronJS Process Model Diagram

  • 基于 WebView2 的应用程序进程模型

    WebView2 Process Model Diagram

在此处了解有关WebView2 的进程模型Electron 的进程模型的更多信息。

Electron 提供了用于常见桌面应用程序需求的 API,例如菜单、文件系统访问、通知等等。WebView2 是一个旨在集成到应用程序框架(如 WinForms、WPF、WinUI 或 Win32)中的组件。WebView2 不通过 JavaScript 提供 Web 标准之外的操作系统 API。

Node.js 已集成到 Electron 中。Electron 应用程序可以使用渲染器和主进程中的任何 Node.js API、模块或 node-native-addon。WebView2 应用程序不假定应用程序的其余部分是用哪种语言或框架编写的。您的 JavaScript 代码必须通过应用程序主机进程代理任何操作系统访问。

Electron 努力保持与 Web API 的兼容性,包括从 Fugu 项目开发的 API。我们有一个 Electron Fugu API 兼容性快照。WebView2 维护了一个类似的与 Edge 的 API 差异列表。

Electron 为 Web 内容提供了可配置的安全模型,从完全访问到完全沙盒。WebView2 内容始终是沙盒化的。Electron 在选择安全模型方面有全面的安全文档。WebView2 也有安全最佳实践

Electron 源代码在 GitHub 上维护和提供。应用程序可以修改并构建自己的 Electron 品牌。WebView2 源代码在 GitHub 上不可用。

快速总结

ElectronWebView2
构建依赖项ChromiumEdge
GitHub 上提供的源代码
共享 Edge/Chrome DLL是(截至 Edge 90)
应用程序之间的共享运行时可选
应用程序 API
Node.js
沙盒可选始终
需要应用程序框架
支持的平台Mac、Win、LinuxWin(计划支持 Mac/Linux)
应用程序之间的进程共享从不可选
由以下对象管理的框架更新应用程序WebView2

性能讨论

在渲染您的网页内容时,我们预计 Electron、WebView2 和任何其他基于 Chromium 的渲染器之间的性能差异很小。我们为那些有兴趣研究潜在性能差异的人创建了使用 Electron、C++ + WebView2 和 C# + WebView2 构建的应用程序的脚手架

在渲染网页内容之外,还有一些差异会起作用,来自 Electron、WebView2、Edge 和其他方面的人员都表示有兴趣进行详细的比较,包括 PWA。

进程间通信 (IPC)

我们想立即强调一个差异,因为我们认为它通常是 Electron 应用程序中的性能考虑因素。

在 Chromium 中,浏览器进程充当沙盒渲染器和系统其余部分之间的 IPC 代理。虽然 Electron 允许非沙盒渲染进程,但许多应用程序选择启用沙盒以增强安全性。WebView2 始终启用沙盒,因此对于大多数 Electron 和 WebView2 应用程序,IPC 会影响整体性能。

即使 Electron 和 WebView2 具有相似的进程模型,但底层 IPC 是不同的。在 JavaScript 和 C++ 或 C# 之间进行通信需要编组,最常见的是编组为 JSON 字符串。JSON 序列化/解析是一项开销很大的操作,并且 IPC 瓶颈会对性能产生负面影响。从 Edge 93 开始,WV2 将使用 CBOR 进行网络事件。

Electron 通过 MessagePorts API 支持任意两个进程之间的直接 IPC,该 API 利用 结构化克隆算法。当在进程之间发送对象时,利用此方法的应用程序可以避免支付 JSON 序列化成本。

总结

Electron 和 WebView2 有许多差异,但在渲染网页内容的性能方面,不要期望有太大的差异。最终,应用程序的架构和 JavaScript 库/框架对内存和性能的影响比其他任何因素都大,因为无论在何处运行,Chromium 都是 Chromium

特别感谢 WebView2 团队审阅这篇文章,并确保我们对 WebView2 架构有最新的了解。他们欢迎任何关于该项目的反馈

新的 Electron 发布节奏

·6 分钟阅读

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


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

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

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

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

我们第一个使用 Chromium 扩展稳定版的版本将是 Electron 15,发布日期为 2021 年 9 月 21 日

考虑到发布节奏的更改会影响其他下游应用程序,我们希望尽快通知我们的开发人员社区。请继续阅读以了解有关我们 2021 年发布计划的更多详细信息。

Electron 15:临时 Alpha 版

鉴于我们最初的 Electron 15 版本目标是非扩展稳定版本(Chromium 的扩展稳定版本基于其偶数版本),我们需要更改我们最初的目标发布日期。但是,Electron 应用程序必须使用最新的 2 个主要 Chromium 版本才能被 Microsoft Store 接受,这使得等待两个 Chromium 版本变得站不住脚。

根据这两个要求,我们的团队面临着时间困境。将 Electron 15 迁移到包含 Chromium M94 将使应用程序开发人员能够使用 Chromium 的第一个扩展稳定版本;但是,它也会将 beta 版到稳定版的周期缩短到只有 3 周。

为了帮助完成此切换,Electron 将提供一个临时 alpha 构建版本,仅用于 Electron 15 版本。此 alpha 构建版本将为开发人员提供更多时间来测试和计划 Electron 15 发布,并且构建版本比我们当前的每日构建版本更稳定。

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

2021 年发布计划

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

ElectronChromeAlpha 发布Beta 发布稳定版发布稳定周期(周)
E13M91-2021-3-52021-5-2512
E14M93-2021-5-262021-8-3114
E15M942021-7-202021-9-12021-9-219(包括 alpha 版)
E16M96-2021-9-222021-11-168
E17M98-2021-11-172022-2-111

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

为了进一步帮助应用程序开发人员,在 2021 年剩余时间到 2022 年 5 月期间,我们还将把我们支持的版本策略从最新的 3 个版本延长到最新的 4 个 Electron 版本。这意味着,即使您无法立即更改升级计划,旧版本的 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 版和每日构建版本。

E13 (2021 年 5 月)E14 (2021 年 8 月)E15 (2021 年 9 月)E16 (2021 年 11 月)E17 (2022 年 2 月)E18 (2022 年 3 月)E19 (2022 年 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--

问题?

📨 如果您有任何问题或疑虑,请发送邮件至 [email protected]加入我们的 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
  • 添加了对通过上下文桥传递 DOM 元素的支持。#26776
  • 为沙盒渲染器添加了 process.uptime()#26684
  • 为作为 context-menu 事件一部分发出的参数添加了缺少的字段。#26788
  • 增加了对注册 Manifest V3 扩展服务工作线程的支持。
  • 向 ServiceWorkers 添加了“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 安装它,或从我们的发布网站下载。请继续阅读以了解有关此版本的详细信息,并请分享您的任何反馈!

显著变化

堆栈变更

突出特点

  • 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 Silicon 上在 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-loadedextension-unloadedextension-ready 事件。#25385
    • 添加了 session.setSSLConfig() 用于配置 SSL。#25461
    • session.setProxy() 中添加了显式指定 directauto_detectsystem 模式的支持。#24937
    • 添加了 Serial API 支持。#25237
    • 添加了启用/禁用拼写检查器的 API。#26276
  • shell API 更改
    • 添加了一个新的异步 shell.trashItem() API,替换了同步的 shell.moveItemToTrash()#25114
  • webContents API 更改
    • 在控制台中添加了一个小的控制台提示,以帮助调试渲染器崩溃。#25317
    • 在 webRequest 处理程序中的 details 对象中添加了 framewebContents 属性。#27334
    • 添加了 webContents.forcefullyCrashRenderer() 以强制终止渲染器进程,从而帮助恢复挂起的渲染器。#25580
    • 为渲染器创建的子窗口添加了 setWindowOpenHandler API,并弃用了 new-window 事件。#24517
  • webFrame API 更改
    • 向渲染器添加了拼写检查 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 硬件的新支持。

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

显著变化

堆栈变更

突出特点

有关新功能和更改的完整列表,请参阅 11.0.0 版本说明

重大更改

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

有关这些和未来更改的更多信息,请参见计划的重大更改页面。

API 更改

  • 添加了 app.getApplicationInfoForProtocol() API,该 API 返回有关处理特定协议的应用程序的详细信息。#24112
  • 添加了 app.createThumbnailFromPath() API,该 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上下文感知奠定基础。强制执行此更改可以提高安全性、加快性能并减少维护工作量。 此计划的最后一步是删除在 Electron 12 中禁用渲染进程重用的功能。

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

Apple Silicon 支持

·3 分钟阅读

随着 Apple Silicon 硬件将在今年晚些时候发布,您在新的硬件上运行 Electron 应用程序的路径是什么样的?


随着 Electron 11.0.0-beta.1 的发布,Electron 团队现在正在发布在 Apple 计划在今年晚些时候发布的新 Apple Silicon 硬件上运行的 Electron 构建版本。您可以使用 npm install electron@beta 获取最新的 beta 版本,或直接从我们的 发布网站 下载。

它是如何工作的?

从 Electron 11 开始,我们将为 Intel Mac 和 Apple Silicon Mac 提供单独的 Electron 版本。在此更改之前,我们已经发布了两个工件,darwin-x64mas-x64,后者用于 Mac App Store 兼容性使用。我们现在正在发布另外两个工件,darwin-arm64mas-arm64,它们是上述工件的 Apple Silicon 等效项。

我需要做什么?

您需要发布两个版本的应用程序:一个用于 x64 (Intel Mac),一个用于 arm64 (Apple Silicon)。好消息是 electron-packagerelectron-rebuildelectron-forge 已经支持以 arm64 架构为目标。只要您运行的是这些软件包的最新版本,一旦您将目标架构更新为 arm64,您的应用程序就应该可以完美运行。

将来,我们将发布一个软件包,允许您将 arm64x64 应用程序“合并”到单个通用二进制文件中,但值得注意的是,此二进制文件将非常大,可能不是向用户发布的理想选择。

更新:此软件包现在可在 @electron/universal 中获得。您可以使用它将两个打包的 x64 和 arm64 应用程序合并到单个二进制文件中。

潜在问题

本机模块

由于您正在针对新的架构,您需要更新一些依赖项,这可能会导致构建问题。以下列出了某些依赖项的最低版本,供您参考。

依赖项版本要求
Xcode>=12.2.0
node-gyp>=7.1.0
electron-rebuild>=1.12.0
electron-packager>=15.1.0

由于这些依赖项的版本要求,您可能需要修复/更新某些原生模块。需要注意的是,Xcode 升级会引入新版本的 macOS SDK,这可能会导致您的原生模块构建失败。

如何测试?

目前,Apple Silicon 应用程序只能在 Apple Silicon 硬件上运行,而撰写此博文时,这种硬件尚未商业化。如果您有 开发者过渡套件,则可以在该套件上测试您的应用程序。否则,您必须等待生产型 Apple Silicon 硬件发布后才能测试您的应用程序是否正常工作。

关于 Rosetta 2 呢?

Rosetta 2 是 Apple 最新迭代的 Rosetta 技术,它允许您在其新的 arm64 Apple Silicon 硬件上运行 x64 Intel 应用程序。虽然我们相信 x64 Electron 应用程序将在 Rosetta 2 下运行,但有一些重要事项需要注意(以及您应该发布原生 arm64 二进制文件的原因)。

  • 您的应用程序性能将显著下降。Electron / V8 对 JavaScript 使用 JIT 编译,并且由于 Rosetta 的工作方式,您实际上将运行两次 JIT(一次在 V8 中,一次在 Rosetta 中)。
  • 您将失去 Apple Silicon 中新技术的好处,例如增加的内存页面大小。
  • 我们是否提到了性能将显著下降?

社区 Discord 服务器和 Hacktoberfest

·3 分钟阅读

加入我们,参与社区联谊和为期一个月的开源庆典。


Hacktoberfest and Discord banner

Electron 社区 Discord 启动

Electron 的 对外拓展工作组 很高兴地宣布我们官方社区 Discord 服务器启动!

为什么需要新的 Discord 服务器?

在其作为 Atom 文本编辑器 的支柱的早期,Electron 框架的社区讨论发生在 Atom 的 Slack 工作区中的单个频道中。随着时间的推移,这两个项目之间的耦合越来越少,Atom 工作区与 Electron 项目的相关性降低,维护者在 Slack 频道中的参与度也同样下降。

到目前为止,我们仍然将更广泛的社区重定向到 Atom Slack 工作区,即使我们收到了许多用户的报告,称他们难以收到邀请,并且我们很少有核心维护者经常访问该频道。

我们正在建立这个全新的服务器,作为社区的中心讨论中心,您可以在这里获取有关 Electron 的所有最新消息。

来这里!

到目前为止,该服务器的成员包括一些一直在共同努力设置它的维护人员,但是我们非常兴奋与大家聊天!来寻求帮助、了解 Electron 的最新版本,或者只是与其他开发人员一起闲逛。我们为您准备了一个方便的 邀请链接,您可以通过它访问服务器!

Hacktoberfest 2020

作为一个大型且长期运行的开源项目,如果没有社区的贡献,从代码提交到错误报告,再到文档更改等等,Electron 就不会如此成功。这就是为什么我们相信参与 Hacktoberfest 的重要性,以便将更广泛的各技能水平的开发人员引入该项目。

杂项

今年,我们没有更广泛的项目可以给大家参与,但是我们想专注于在 Electron JavaScript 生态系统中做出贡献的机会。

请注意在我们的各种存储库中标记为 hacktoberfest 的问题,包括主要的 electron/electron 存储库、electron/electronjs.org 网站、electron/fiddleelectron-userland/electron-forge

附言:如果您感觉特别有冒险精神,如果您正在寻找更多挑战,我们还有一个使用 help wanted 标签标记的问题积压。

遇到困难?来和我们聊天!

此外,我们的 Discord 服务器盛大开幕与今年最大的开源软件庆祝活动不谋而合。查看 #hacktoberfest 频道以寻求有关您的 Hacktoberfest PR 的帮助。如果您错过了,这是邀请链接

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 问题 1113227)。#24998

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

重大更改

  • enableRemoteModule 的默认值更改为 false#22091
    • 这是我们弃用 remote 模块并将其移至用户空间计划的一部分。您可以阅读并关注 此问题,其中详细说明了我们这样做的原因,并包括建议的弃用时间表。
  • app.allowRendererProcessReuse 的默认值更改为 true#22336(在 Electron 9 中也是如此)
    • 这将阻止在渲染器进程中加载非上下文感知的原生模块。
    • 您可以阅读并关注 此问题,其中详细说明了我们这样做的原因,并包括建议的弃用时间表。
  • 修复了当操作系统区域设置设置为从右到左的语言(如阿拉伯语或希伯来语)时 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 中,我们计划继续进行重构工作,以实现 WeakRef,就像我们在 Electron 10 中所做的那样。请阅读并关注 此 issue,了解关于弃用的完整计划和详细信息。

要求本机 Node 模块为上下文感知或 N-API 的最终步骤(在 Electron 12 中)

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

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

Electron 成为 OpenJS 基金会影响项目

·一分钟阅读

今天上午在 OpenJS World 大会上,我们宣布 Electron 已正式从 OpenJS 基金会的孵化计划毕业,现在是 OpenJS 基金会的影响力项目。

Electron 于 2019 年 12 月,在蒙特利尔举行的上次 OpenJS 基金会全球大会上进入孵化阶段。我们很高兴能够作为影响力项目在 JavaScript 社区中发挥更大的作用,并继续与 OpenJS 基金会合作。


了解更多

您可以在 OpenJSF 网站上了解有关该基金会、其使命及其成员的更多信息。OpenJS 基金会托管着许多开源 JavaScript 项目,包括 jQuery、Node.js 和 webpack。它由 30 家企业和终端用户成员支持,包括 GoDaddy、Google、IBM、Intel、Joyent 和 Microsoft。

Electron 是一个开源框架,用于使用 Web 技术构建跨平台桌面应用程序。要了解更多关于 Electron 背后的开发人员以及他们如何协作的信息,请查看我们的 治理页面

要开始使用 Electron 本身,请浏览 我们的文档