跳到主要内容

Electron 35.0.0

·5 分钟阅读

Electron 35.0.0 已发布!它包括升级到 Chromium 134.0.6998.44、V8 13.5 和 Node 22.14.0。


Electron 团队很高兴地宣布 Electron 35.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或者从我们的发布网站下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 BlueskyMastodon 上与我们分享,或者加入我们的社区 Discord!错误和功能请求可以在 Electron 的 issue tracker 中报告。

值得注意的更改

Service Worker 预加载脚本以改进扩展支持

最初由 @samuelmaddockRFC #8 中提出,Electron 35 添加了将预加载脚本附加到 Service Workers 的能力。随着 Chrome 的 Manifest V3 扩展将大量工作路由到扩展 service workers,此功能填补了 Electron 对现代 Chrome 扩展支持方面的空白。

当在 Session 级别以编程方式注册预加载脚本时,您现在可以使用 ses.registerPreloadScript(script) API 专门将其应用于 Service Worker 上下文。

主进程
// Add our preload realm script to the session.
session.defaultSession.registerPreloadScript({
// Our script should only run in service worker preload realms.
type: 'service-worker',
// The absolute path to the script.
script: path.join(__dirname, 'extension-sw-preload.js'),
});

此外,IPC 现在在 Service Workers 和其附加的预加载脚本之间通过 ServiceWorkerMain.ipc 类可用。预加载脚本仍将使用 ipcRenderer 模块与其 Service Worker 通信。有关更多详细信息,请参阅原始 RFC。

此功能之前进行了许多其他更改,为它奠定了基础

  • #45329 重新设计了 Session 模块的预加载 API,以支持注册和注销单个预加载脚本。
  • #45229 添加了实验性的 contextBridge.executeInMainWorld(executionScript) 脚本,以在主世界中通过上下文桥评估 JavaScript。
  • #45341 添加了 ServiceWorkerMain 类,以便在主进程中与 Service Workers 交互。

堆栈更改

Electron 35 将 Chromium 从 132.0.6834.83 升级到 134.0.6998.44,Node 从 20.18.1 升级到 22.14.0,V8 从 13.2 升级到 13.5

新功能

  • Info.plist 中添加了 NSPrefersDisplaySafeAreaCompatibilityMode = false,以从应用程序选项中删除 “缩放以适应内置摄像头下方”。 #45357 (也在 v34.1.0 中)
  • 添加了 ServiceWorkerMain 类,以便在主进程中与 service workers 交互。 #45341
    • ServiceWorkers 上添加了 running-status-changed 事件,以指示 service worker 的运行状态何时更改。
    • ServiceWorkers 上添加了 startWorkerForScope,以启动可能先前已停止的 worker。
  • 添加了实验性的 contextBridge.executeInMainWorld,以安全地跨世界边界执行代码。 #45330
  • frame 添加到 'console-message' 事件。 #43617
  • 在 Windows 上添加了 query-session-end 事件并改进了 session-end 事件。 #44598
  • 添加了 view.getVisible()#45409
  • 添加了 webContents.navigationHistory.restore(index, entries) API,允许恢复导航历史记录。 #45583
  • BrowserWindow.setVibrancy 添加了可选的动画参数。 #35987
  • 添加了对 document.executeCommand("paste") 的权限支持。 #45471 (也在 v34.1.0 中)
  • 在 Windows 上为 roundedCorners BrowserWindow 构造函数选项添加了支持。 #45740 (也在 v34.3.0 中)
  • 添加了对 service worker 预加载脚本的支持。 #45408
  • 支持 Portal 的 globalShortcuts。Electron 必须在 --enable-features=GlobalShortcutsPortal 的情况下运行才能使该功能正常工作。 #45297

重大更改

已移除:PrinterInfo 上的 isDefaultstatus 属性

这些属性已从 PrinterInfo 对象中移除,因为它们已从上游 Chromium 中移除。

已弃用:session.serviceWorkers 上的 getFromVersionID

session.serviceWorkers.fromVersionID(versionId) API 已被弃用,取而代之的是 session.serviceWorkers.getInfoFromVersionID(versionId)。进行此更改是为了更清楚地了解返回哪个对象,因为引入了 session.serviceWorkers.getWorkerFromVersionID(versionId) API。

// Deprecated
session.serviceWorkers.fromVersionID(versionId);

// Replace with
session.serviceWorkers.getInfoFromVersionID(versionId);

已弃用:Session 上的 setPreloadsgetPreloads

引入了 registerPreloadScriptunregisterPreloadScriptgetPreloadScripts 作为已弃用方法的替代方案。这些新的 API 允许第三方库注册预加载脚本,而无需替换现有脚本。此外,新的 type 选项允许超出 frame 的其他预加载目标。

// Deprecated
session.setPreloads([path.join(__dirname, 'preload.js')]);

// Replace with:
session.registerPreloadScript({
type: 'frame',
id: 'app-preload',
filePath: path.join(__dirname, 'preload.js'),
});

已弃用:WebContentsconsole-message 事件中的 levelmessagelinesourceId 参数

WebContents 上的 console-message 事件已更新为提供有关 Event 参数的详细信息。

// Deprecated
webContents.on(
'console-message',
(event, level, message, line, sourceId) => {},
);

// Replace with:
webContents.on(
'console-message',
({ level, message, lineNumber, sourceId, frame }) => {},
);

此外,level 现在是一个字符串,可能的值为 infowarningerrordebug

行为已更改:WebRequestFilterurls 属性。

以前,空 urls 数组被解释为包括所有 URL。为了显式包含所有 URL,开发人员现在应使用 <all_urls> 模式,这是一个指定的 URL 模式,它匹配每个可能的 URL。此更改明确了意图,并确保了更可预测的行为。

// Deprecated
const deprecatedFilter = {
urls: [],
};

// Replace with
const newFilter = {
urls: ['<all_urls>'],
};

已弃用:systemPreferences.isAeroGlassEnabled()

systemPreferences.isAeroGlassEnabled() 函数已被弃用,没有替代方案。自 Electron 23 以来,它一直返回 true,Electron 23 仅支持 Windows 10+,在 Windows 10+ 中,DWM 合成不再可以禁用。

https://learn.microsoft.com/en-us/windows/win32/dwm/composition-ovw#disabling-dwm-composition-windows7-and-earlier

32.x.y 版本终止支持

根据项目的支持策略,Electron 32.x.y 已达到终止支持。鼓励开发人员和应用程序升级到较新版本的 Electron。

E35 (25 年 3 月)E36 (25 年 4 月)E37 (25 年 6 月)
35.x.y36.x.y37.x.y
34.x.y35.x.y36.x.y
33.x.y34.x.y35.x.y

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问计划的重大更改页面。

2025 年 Google 编程之夏

·5 分钟阅读

Electron 再次被接受为 2025 年 Google 编程之夏 (GSoC) 的指导组织!Google 编程之夏是一项全球性计划,专注于将新的贡献者引入开源软件开发。

有关该计划的更多详细信息,请访问 Google 的 编程之夏主页

关于我们

Electron 是一个 JavaScript 框架,用于使用 Web 技术构建跨平台桌面应用程序。核心 Electron 框架是一个使用 ChromiumNode.js 构建的编译后的二进制可执行文件,并且主要用 C++ 编写。

除了 Electron 核心存储库之外,我们还维护几个项目来支持 Electron 生态系统,包括

作为 GSoC 贡献者,您将有机会与 Electron 的一些核心贡献者在 github.com/electron umbrella 下的众多项目之一上进行协作。

申请前

如果您不太熟悉 Electron,我们建议您首先阅读文档,并尝试 Electron Fiddle 中的一些示例。

要了解有关分发 Electron 应用程序的更多信息,请尝试使用 Electron Forge 创建一个示例应用程序

npm init electron-app@latest my-app

在稍微熟悉代码后,加入 Electron Discord 服务器上的对话。

信息

如果这是您第一次参加 Google 编程之夏,或者如果您是开源新手,我们建议您在与社区互动之前阅读 Google 的 贡献者指南

项目贡献

我们鼓励您查看与您感兴趣的项目想法相关的任何存储库。进行研究的一种方法是通过报告错误、分类现有问题或提交拉取请求来做出贡献。这样做是获得我们代码库实践经验的有效方法,但对于提案提交不是强制性的。一份精心编写的提案应该能够证明您对代码的理解,而无需参考过去的贡献。

如果您希望在提交提案之前为 Electron 做出贡献,以下是一些提示

  1. 提交贡献时,请提供描述性的问题或 PR 描述。无论代码本身如何,为书面部分付出努力都向我们表明您可以在协作环境中成为有效的沟通者。
  2. PR 始终欢迎针对开放问题。您无需在问题上评论询问维护者是否可以将您分配给它。请注意,如果您需要改进解决方案的想法,我们仍然鼓励您在问题上讨论潜在的解决方案,但严格询问您是否可以从事某项工作的评论是多余的,并且会给问题跟踪器增加噪音。
  3. 低质量的项目贡献(例如,无效的问题报告、仓库 README 中的琐碎措辞更改或对前端代码的细微风格更改)将对您的最终提案产生负面影响,因为它们会占用有限的维护者时间,并且不会为 Electron 项目带来任何净收益。
  4. 虽然 AI 编码助手可以是调试和理解新概念的有效工具,但我们强烈反对直接从 AI 生成的输出复制/粘贴的贡献。这些通常质量低下,并且维护者清理从 LLM 生成的代码通常比我们完全拒绝 PR 更费力。

撰写您的提案

有兴趣与 Electron 合作?首先,查看我们准备的七个项目想法草案。所有列出的想法都接受提案。

如果您有列表中没有的独特想法,我们愿意考虑,但请确保您的提案详细且彻底概述。如有疑问,我们建议您坚持我们列出的想法。

您的申请应包括

  • 一份详细的提案,概述您计划在夏季实现的目标。
  • 您作为开发人员的背景。如果您有简历,请附上一份副本。否则,请告诉我们您过去的技​​术经验。
    • 在某些领域缺乏经验不会使您失去资格,但它将帮助我们的导师制定计划,以最好地支持您并确保您的夏季项目取得成功。

此处提供了作为 Electron 应用程序一部分提交的详细指南直接向 Google 编程之夏门户网站提交提案。发送给 Electron 团队的提案将不被视为最终提交。

有关您的提案的更多指导,我们建议您遵循 此处的官方 Google 编程之夏提案写作建议

申请将于 2025 年 3 月 24 日开放,并于 2025 年 4 月 8 日关闭。

过去的提案

📚 对于 GSoC 2024,@piotrpdev 致力于向 Electron 核心文档添加 API 历史记录。要了解 Piotr 在 Electron 度过夏天期间所做的工作,请阅读 2024 年 GSoC 计划档案中的报告。

🔐 对于 GSoC 2022,@aryanshridhar 致力于在 Electron Fiddle 中启用上下文隔离。如果您想了解 Aryan 在 Electron 度过夏天期间所做的工作,您可以在 2022 年 GSoC 计划档案中阅读他的报告。

有问题吗?

如果您有我们在此博客文章中未解决的问题,或者对您的提案草案有疑问,请发送电子邮件至 summer-of-code@electronjs.org 或查看 GSoC FAQ。在发送电子邮件之前,请阅读我们的贡献者指南

资源

Electron 34.0.0

·4 分钟阅读

Electron 34.0.0 已发布!它包括升级到 Chromium 132.0.6834.83、V8 13.2 和 Node 20.18.1。


Electron 团队很高兴地宣布 Electron 34.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或者从我们的发布网站下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 BlueskyMastodon 上与我们分享,或者加入我们的社区 Discord!错误和功能请求可以在 Electron 的 issue tracker 中报告。

值得注意的更改

HTTP 压缩共享字典管理 API

HTTP 压缩允许 Web 服务器在浏览器接收数据之前对其进行压缩。现代版本的 Chromium 支持 Brotli 和 Zstandard,这两种是比 gzip 等旧方案性能更好的新型压缩算法,尤其对于文本文件而言。

自定义共享字典进一步提高了 Brotli 和 Zstandard 压缩的效率。有关更多信息,请参阅关于共享字典的 Chrome for Developers 博客

@felixrieseberg#44950 中添加了以下 API,以管理 Session 级别的共享字典

  • session.getSharedDictionaryUsageInfo()
  • session.getSharedDictionaryInfo(options)
  • session.clearSharedDictionaryCache()
  • session.clearSharedDictionaryCacheForIsolationKey(options)

无响应的渲染器 JavaScript 调用堆栈

每当渲染器进程挂起过长时间时,就会发生 Electron 的 unresponsive 事件。@samuelmaddock#44204 中添加的新 WebFrameMain.collectJavaScriptCallStack() API 允许您从关联的 WebFrameMain 对象 (webContnets.mainFrame) 收集 JavaScript 调用堆栈。

当存在导致进程挂起的长时间运行的 JavaScript 事件时,此 API 可用于确定帧无响应的原因。有关更多信息,请参阅提议的 Web 标准崩溃报告 API

主进程
const { app } = require('electron');

app.commandLine.appendSwitch(
'enable-features',
'DocumentPolicyIncludeJSCallStacksInCrashReports',
);

app.on('web-contents-created', (_, webContents) => {
webContents.on('unresponsive', async () => {
// Interrupt execution and collect call stack from unresponsive renderer
const callStack = await webContents.mainFrame.collectJavaScriptCallStack();
console.log('Renderer unresponsive\n', callStack);
});
});
警告

此 API 需要启用 'Document-Policy': 'include-js-call-stacks-in-crash-reports' 标头。有关更多详细信息,请参阅 #45356

堆栈更改

Electron 34 将 Chromium 从 130.0.6723.44 升级到 132.0.6834.83,Node 从 20.18.0 升级到 20.18.1,V8 从 13.0 升级到 13.2

新功能

  • 添加了 API 以管理共享字典,从而提高使用 Brotli 或 ZStandard 的压缩效率。新的 API 是 session.getSharedDictionaryUsageInfo()session.getSharedDictionaryInfo(options)session.clearSharedDictionaryCache()session.clearSharedDictionaryCacheForIsolationKey(options)#44950
  • 添加了 WebFrameMain.collectJavaScriptCallStack(),用于访问无响应渲染器的 JavaScript 调用堆栈。 #44938
  • 添加了 WebFrameMain.detached,用于卸载状态的帧。
    • 添加了 WebFrameMain.isDestroyed(),以确定帧是否已被销毁。
    • 修复了当帧正在卸载时,webFrameMain.fromId(processId, frameId) 返回的 WebFrameMain 实例与给定参数不匹配的问题。 #43473
  • 在实用程序进程中添加了错误事件,以支持 V8 致命错误的诊断报告。 #43774
  • 特性:GPU 加速共享纹理离屏渲染。 #42953

重大更改

行为已更改:Windows 上全屏模式下将隐藏菜单栏

这使行为与 Linux 保持一致。先前行为:Windows 上全屏模式下菜单栏仍然可见。新行为:Windows 上全屏模式下菜单栏被隐藏。

更正:这之前在 Electron 33 中被列为重大更改,但首次发布是在 Electron 34 中。

31.x.y 版本终止支持

根据项目的支持策略,Electron 31.x.y 已达到终止支持。鼓励开发人员和应用程序升级到较新版本的 Electron。

E34 (25 年 1 月)E35 (25 年 4 月)E36 (25 年 6 月)
34.x.y35.x.y36.x.y
33.x.y34.x.y35.x.y
32.x.y33.x.y34.x.y

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问计划的重大更改页面。

将我们的生态系统迁移到 Node 22

·2 分钟阅读

在 2025 年初,Electron 的 npm 生态系统仓库(在 @electron/@electron-forge/ 命名空间下)将转移到 Node.js 22 作为最低支持版本。


这意味着什么?

过去,Electron 的 npm 生态系统(Forge、Packager 等)中的软件包尽可能长时间地支持 Node 版本,即使在版本达到其生命周期 (EOL) 日期之后也是如此。这样做是为了确保我们不会使生态系统碎片化——我们理解许多项目依赖于旧版本的 Node,并且我们不想冒着让这些项目搁浅的风险,除非有迫切的升级理由。

随着时间的推移,将 Node.js 14 用作我们的最低版本变得越来越困难,原因如下

  • 官方 Node.js 14 macOS ARM64 构建的缺乏需要我们维护 CI 基础设施的解决方法,以提供完整的测试覆盖率。
  • 上游软件包依赖项的 engines 要求已向前发展,使得解决依赖项升级带来的供应链安全问题变得越来越困难。

此外,较新版本的 Node.js 包含了许多我们想要利用的改进,例如运行时原生通用工具(例如 fs.globutil.parseArgs)以及全新的内置模块(例如 node:testnode:sqlite)。

为何现在升级?

在 2024 年 7 月,Electron 生态系统工作组决定将所有软件包升级到最早的 Node 版本,该版本将支持同步 ESM 图的 require()(请参阅 nodejs/node#51977nodejs/node#53500),并在该版本达到 LTS 日期之后的未来某个时间点进行升级。

我们已决定将更新时间设定为 2025 年 1 月/2 月。在此升级发生后,Node 22 将成为现有生态系统软件包中支持的最低版本。

我需要采取什么行动?

我们将努力尽可能保持兼容性。但是,为了确保最佳支持,我们鼓励您将应用升级到 Node 22 或更高版本。

请注意,您项目中运行的 Node 版本与嵌入到您当前 Electron 版本中的 Node 版本无关。

下一步是什么

如果您有任何问题或疑虑,请随时写信给我们:info@electronjs.org。您还可以在我们的官方 Electron Discord 中找到社区支持。

十二月静默期 (24 年 12 月)

·1 分钟阅读

Electron 项目将在 2024 年 12 月暂停,然后在 2025 年 1 月恢复全速运行。

via GIPHY


12 月份将保持不变的内容

  1. 零日漏洞和其他主要安全相关的版本将根据需要发布。安全事件应通过 SECURITY.md 报告。
  2. 行为准则 报告和审核将继续进行。

12 月份将有所不同的内容

  1. 今年的最后稳定分支版本,包括 Electron 31、32 和 33,将在 12 月 1 日当周发布。12 月份将不会有额外的计划发布。
  2. 12 月最后两周没有 Nightly 和 Alpha 版本发布。
  3. 除少数例外,不进行拉取请求审查或合并。
  4. 任何存储库上都不会更新问题跟踪器。
  5. 维护者不会提供 Discord 调试帮助。
  6. 不会更新社交媒体内容。

2025 年见!

从 BrowserView 迁移到 WebContentsView

·3 分钟阅读

BrowserViewElectron 30 以来已被弃用,并由 WebContentView 替代。幸运的是,迁移过程相当轻松。


Electron 正在从 BrowserView 迁移到 WebContentsView,以与 Chromium 的 UI 框架 Views API 对齐。WebContentsView 提供了一个可重用的视图,直接与 Chromium 的渲染管线绑定,简化了未来的升级,并为开发者集成非 Web UI 元素到他们的 Electron 应用中开辟了可能性。通过采用 WebContentsView,应用程序不仅为即将到来的更新做好了准备,而且从长远来看还能受益于降低的代码复杂性和更少的潜在错误。

熟悉 BrowserWindows 和 BrowserViews 的开发者应注意,BrowserWindowWebContentsView 分别是继承自 BaseWindowView 基类的子类。要充分理解可用的实例变量和方法,请务必查阅这些基类的文档。

迁移步骤

1. 升级 Electron 至 30.0.0 或更高版本

警告

Electron 版本可能包含会影响您的应用程序的重大更改。最好在继续进行此迁移的其余部分之前,首先在您的应用上测试并落实 Electron 升级。每个 Electron 主要版本的重大更改列表都可以在此处以及 Electron 博客上每个主要版本的发布说明中找到。

2. 熟悉您的应用程序使用 BrowserViews 的位置

一种方法是在您的代码库中搜索 new BrowserView(。这应该让您了解您的应用程序如何使用 BrowserViews 以及有多少调用点需要迁移。

提示

在大多数情况下,您的应用程序实例化新 BrowserViews 的每个实例都可以与其他实例隔离地迁移。

3. 迁移 BrowserView 的每个用法

  1. 迁移实例化。这应该相当简单,因为 WebContentsViewBrowserView 的构造函数本质上具有相同的形状。两者都通过 webPreferences 参数接受 WebPreferences

    - this.tabBar = new BrowserView({
    + this.tabBar = new WebContentsView({
    信息

    默认情况下,WebContentsView 实例化时背景为白色,而 BrowserView 实例化时背景为透明。要在 WebContentsView 中获得透明背景,请将其背景颜色设置为 RGBA 十六进制值,并将 alpha(不透明度)通道设置为 00

    + this.webContentsView.setBackgroundColor("#00000000");
  2. 迁移将 BrowserView 添加到其父窗口的位置。

    - this.browserWindow.addBrowserView(this.tabBar)
    + this.browserWindow.contentView.addChildView(this.tabBar);
  3. 迁移父窗口上的 BrowserView 实例方法调用。

    旧方法新方法注释
    win.setBrowserViewwin.contentView.removeChildView + win.contentView.addChildView
    win.getBrowserViewwin.contentView.children
    win.removeBrowserViewwin.contentView.removeChildView
    win.setTopBrowserViewwin.contentView.addChildView在现有视图上调用 addChildView 会将其重新排序到顶部。
    win.getBrowserViewswin.contentView.children
  4. setAutoResize 实例方法迁移到 resize 监听器。

    - this.browserView.setAutoResize({
    - vertical: true,
    - })

    + this.browserWindow.on('resize', () => {
    + if (!this.browserWindow || !this.webContentsView) {
    + return;
    + }
    + const bounds = this.browserWindow.getBounds();
    + this.webContentsView.setBounds({
    + x: 0,
    + y: 0,
    + width: bounds.width,
    + height: bounds.height,
    + });
    + });
    提示

    browserView.webContents 的所有现有用法以及实例方法 browserView.setBoundsbrowserView.getBoundsbrowserView.setBackgroundColor 都不需要迁移,并且应该与 WebContentsView 实例开箱即用!

4. 测试并提交您的更改

遇到问题?查看 Electron 的问题跟踪器上的 WebContentsView 标签,看看您遇到的问题是否已被报告。如果您在那里没有看到您的问题,请随时添加新的错误报告。包含测试用例 gist 将有助于我们更好地分类您的问题!

恭喜,您已迁移到 WebContentsViews!🎉

Electron 33.0.0

·4 分钟阅读

Electron 33.0.0 已发布!它包括 Chromium 130.0.6723.44、V8 13.0 和 Node 20.18.0 的升级。


Electron 团队很高兴地宣布 Electron 33.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或者从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 TwitterMastodon 上与我们分享,或加入我们的社区 Discord!错误和功能请求可以在 Electron 的 问题跟踪器 中报告。

值得注意的更改

亮点

  • 添加了一个处理程序 app.setClientCertRequestPasswordHandler(handler),以帮助在需要 PIN 码时解锁加密设备。#41205
  • 扩展了 navigationHistory API,增加了 2 个新功能,以实现更好的历史记录管理。#42014
  • 改进了原生主题透明度检查。#42862

堆栈更改

Electron 33 将 Chromium 从 128.0.6613.36 升级到 130.0.6723.44,将 Node 从 20.16.0 升级到 20.18.0,并将 V8 从 12.8 升级到 13.0

新功能

  • 添加了一个处理程序 app.setClientCertRequestPasswordHandler(handler),以帮助在需要 PIN 码时解锁加密设备。#41205
  • 在实用程序进程中添加了错误事件,以支持 V8 致命错误的诊断报告。#43997
  • 添加了 View.setBorderRadius(radius),用于自定义视图的边框半径,并与 WebContentsView 兼容。#42320
  • 扩展了 navigationHistory API,增加了 2 个新功能,以实现更好的历史记录管理。#42014

重大更改

已移除:macOS 10.15 支持

macOS 10.15 (Catalina) 不再受 Chromium 支持。

旧版本的 Electron 将继续在 Catalina 上运行,但 macOS 11 (Big Sur) 或更高版本将是运行 Electron v33.0.0 及更高版本的要求。

行为变更:原生模块现在需要 C++20

由于上游所做的更改,V8Node.js 现在都要求 C++20 作为最低版本。使用原生 Node 模块的开发者应使用 --std=c++20 而不是 --std=c++17 构建他们的模块。使用 gcc9 或更低版本的映像可能需要更新到 gcc10 才能编译。有关更多详细信息,请参阅 #43555

行为变更:Windows 上的自定义协议 URL 处理

由于 Chromium 中为支持 非特殊方案 URL 所做的更改,使用 Windows 文件路径的自定义协议 URL 将不再与已弃用的 protocol.registerFileProtocol 以及 BrowserWindow.loadURLWebContents.loadURL<webview>.loadURL 上的 baseURLForDataURL 属性正确地工作。protocol.handle 也将不适用于这些类型的 URL,但这并不是一个变化,因为它一直都是这样工作的。

// No longer works
protocol.registerFileProtocol('other', () => {
callback({ filePath: '/path/to/my/file' });
});

const mainWindow = new BrowserWindow();
mainWindow.loadURL(
'data:text/html,<script src="loaded-from-dataurl.js"></script>',
{ baseURLForDataURL: 'other://C:\\myapp' },
);
mainWindow.loadURL('other://C:\\myapp\\index.html');

// Replace with
const path = require('node:path');
const nodeUrl = require('node:url');
protocol.handle(other, (req) => {
const srcPath = 'C:\\myapp\\';
const reqURL = new URL(req.url);
return net.fetch(
nodeUrl.pathToFileURL(path.join(srcPath, reqURL.pathname)).toString(),
);
});

mainWindow.loadURL(
'data:text/html,<script src="loaded-from-dataurl.js"></script>',
{ baseURLForDataURL: 'other://' },
);
mainWindow.loadURL('other://index.html');

行为变更:app 上的 login 中的 webContents 属性

当事件是由使用 respondToAuthRequestsFromMainProcess 选项创建的 实用程序进程 发出的请求触发时,来自 applogin 事件中的 webContents 属性将为 null

已弃用:BrowserWindowConstructorOption.type 中的 textured 选项

BrowserWindowConstructorOptionstypetextured 选项已被弃用,没有替代方案。此选项依赖于 macOS 上的 NSWindowStyleMaskTexturedBackground 样式掩码,该掩码已被弃用,没有替代方案。

已弃用:systemPreferences.accessibilityDisplayShouldReduceTransparency

systemPreferences.accessibilityDisplayShouldReduceTransparency 属性现在已被弃用,取而代之的是新的 nativeTheme.prefersReducedTransparency,它提供了相同的信息并且可以跨平台工作。

// Deprecated
const shouldReduceTransparency =
systemPreferences.accessibilityDisplayShouldReduceTransparency;

// Replace with:
const prefersReducedTransparency = nativeTheme.prefersReducedTransparency;

30.x.y 版本停止支持

根据项目的 支持策略,Electron 30.x.y 已停止支持。鼓励开发者和应用程序升级到较新版本的 Electron。

E33 (24 年 10 月)E34 (25 年 1 月)E35 (25 年 4 月)
33.x.y34.x.y35.x.y
32.x.y33.x.y34.x.y
31.x.y32.x.y33.x.y

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问计划的重大更改页面。

API 历史记录介绍 (GSoC 2024)

·7 分钟阅读

Electron API 的历史更改现在将在文档中详细说明。


您好 👋,我是 Peter,Electron 的 2024 年 Google Summer of Code (GSoC) 贡献者。

在 GSoC 计划期间,我为 Electron 文档及其函数、类等实现了 API 历史记录功能,其方式与 Node.js 文档 类似:通过允许在 API 文档 Markdown 文件中使用简单但功能强大的 YAML 模式,并在 Electron 文档网站上精美地显示它。

Electron 32.0.0

·4 分钟阅读

Electron 32.0.0 已发布!它包括 Chromium 128.0.6613.36、V8 12.8 和 Node 20.16.0 的升级。


Electron 团队很高兴地宣布 Electron 32.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或者从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 TwitterMastodon 上与我们分享,或加入我们的社区 Discord!错误和功能请求可以在 Electron 的 问题跟踪器 中报告。

值得注意的更改

亮点

  • 在我们的文档中添加了新的 API 版本历史记录,这是 @piotrpdev 作为 Google Summer of Code 的一部分创建的功能。您可以在 这篇博客文章 中了解更多信息。#42982
  • 从 Web File API 中移除了非标准的 File.path 扩展。#42053
  • 当尝试在被阻止的路径中打开文件或目录时,使 Web File System API 中的失败路径与上游对齐。#42993
  • 将以下现有的导航相关 API 添加到 webcontents.navigationHistorycanGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear。之前的导航 API 现在已弃用。#41752

堆栈更改

Electron 32 将 Chromium 从 126.0.6478.36 升级到 128.0.6613.36,将 Node 从 20.14.0 升级到 20.16.0,并将 V8 从 12.6 升级到 12.8

新功能

  • 添加了通过 app 模块的 'login' 事件响应实用程序进程发起的身份验证请求的支持。#43317
  • CPUUsage 结构中添加了 cumulativeCPUUsage 属性,该属性返回自进程启动以来使用的 CPU 时间总秒数。#41819
  • 将以下现有的导航相关 API 添加到 webContents.navigationHistorycanGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear#41752
  • 扩展了 WebContentsView 以接受预先存在的 webContents 对象。#42086
  • nativeTheme 中添加了一个新属性 prefersReducedTransparency,它指示用户是否已选择通过系统辅助功能设置来降低操作系统级别的透明度。#43137
  • 当尝试在被阻止的路径中打开文件或目录时,使 File System Access API 中的失败路径与上游对齐。#42993
  • 在 Linux 上启用了 Windows Control Overlay API。#42681
  • 在网络请求中启用了 zstd 压缩。#43300

重大更改

已移除:File.path

Web File 对象的非标准 path 属性在早期版本的 Electron 中添加,作为在渲染器中执行所有操作时处理原生文件的便捷方法。但是,它代表了与标准的偏差,并且也存在轻微的安全风险,因此从 Electron 32.0 开始,它已被移除,转而使用 webUtils.getPathForFile 方法。

// Before (renderer)
const file = document.querySelector('input[type=file]');
alert(`Uploaded file path was: ${file.path}`);
// After (renderer)
const file = document.querySelector('input[type=file]');
electron.showFilePath(file);

// After (preload)
const { contextBridge, webUtils } = require('electron');

contextBridge.exposeInMainWorld('electron', {
showFilePath(file) {
// It's best not to expose the full file path to the web content if
// possible.
const path = webUtils.getPathForFile(file);
alert(`Uploaded file path was: ${path}`);
},
});

已弃用:WebContents 上的 clearHistorycanGoBackgoBackcanGoForwardgoForwardgoToIndexcanGoToOffsetgoToOffset

WebContents 实例上的导航相关 API 现在已弃用。这些 API 已移至 WebContentsnavigationHistory 属性,以提供更结构化和直观的界面来管理导航历史记录。

// Deprecated
win.webContents.clearHistory();
win.webContents.canGoBack();
win.webContents.goBack();
win.webContents.canGoForward();
win.webContents.goForward();
win.webContents.goToIndex(index);
win.webContents.canGoToOffset();
win.webContents.goToOffset(index);

// Replace with
win.webContents.navigationHistory.clear();
win.webContents.navigationHistory.canGoBack();
win.webContents.navigationHistory.goBack();
win.webContents.navigationHistory.canGoForward();
win.webContents.navigationHistory.goForward();
win.webContents.navigationHistory.canGoToOffset();
win.webContents.navigationHistory.goToOffset(index);

行为变更:userData 中的目录 databases 将被删除

如果您在 app.getPath('userData') 返回的目录中有一个名为 databases 的目录,则当 Electron 32 首次运行时,它将被删除。databases 目录曾被 WebSQL 使用,而 WebSQL 已在 Electron 31 中移除。Chromium 现在执行清理以删除此目录。请参阅 issue #45396

29.x.y 版本停止支持

根据项目的 支持策略,Electron 29.x.y 已停止支持。鼓励开发者和应用程序升级到较新版本的 Electron。

E32 (24 年 8 月)E33 (24 年 10 月)E34 (25 年 1 月)
32.x.y33.x.y34.x.y
31.x.y32.x.y33.x.y
30.x.y31.x.y32.x.y

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问计划的重大更改页面。

Electron 31.0.0

·3 分钟阅读

Electron 31.0.0 已发布!它包括 Chromium 126.0.6478.36、V8 12.6 和 Node 20.14.0 的升级。


Electron 团队很高兴地宣布 Electron 31.0.0 的发布!您可以通过 npm 使用 npm install electron@latest 安装它,或者从我们的 发布网站 下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 TwitterMastodon 上与我们分享,或加入我们的社区 Discord!错误和功能请求可以在 Electron 的 问题跟踪器 中报告。

值得注意的更改

亮点

  • 扩展了 WebContentsView 以接受预先存在的 webContents 对象。#42319
  • 添加了对 NODE_EXTRA_CA_CERTS 的支持。#41689
  • 更新了 window.flashFrame(bool) 以在 macOS 上持续闪烁。#41391
  • 移除了 WebSQL 支持 #41868
  • nativeImage.toDataURL 将保留 PNG 色彩空间 #41610
  • 扩展了 webContents.setWindowOpenHandler 以支持手动创建 BrowserWindow。#41432

堆栈更改

Electron 31 将 Chromium 从 124.0.6367.49 升级到 126.0.6478.36,将 Node 从 20.11.1 升级到 20.14.0,并将 V8 从 12.4 升级到 12.6

新功能

  • Session 添加了 clearData 方法。#40983
    • Session.clearData API 添加了 options 参数。#41355
  • 添加了对 navigator.serial 中按服务类 ID 请求蓝牙端口的支持。#41638
  • 添加了对 Node 的 NODE_EXTRA_CA_CERTS 环境变量的支持。#41689
  • 扩展了 webContents.setWindowOpenHandler 以支持手动创建 BrowserWindow。#41432
  • 实现了对 Web 标准 File System API 的支持。#41419
  • 扩展了 WebContentsView 以接受预先存在的 WebContents 实例。#42319
  • 在 webContents API 上添加了一个新的实例属性 navigationHistory,其中包含 navigationHistory.getEntryAtIndex 方法,使应用程序能够检索浏览历史记录中任何导航条目的 URL 和标题。#41577 (也在 2930 中)

重大更改

已移除:WebSQL 支持

Chromium 已移除对 WebSQL 的上游支持,将其转换为仅限 Android。有关更多信息,请参阅 Chromium 的移除讨论意向

行为变更:nativeImage.toDataURL 将保留 PNG 色彩空间

PNG 解码器实现已更改为保留色彩空间数据。从此函数返回的编码数据现在与之匹配。

有关更多信息,请参阅 crbug.com/332584706

行为变更:win.flashFrame(bool) 将在 macOS 上持续闪烁 dock 图标

这使行为与 Windows 和 Linux 保持一致。先前行为:第一个 flashFrame(true) 仅弹跳一次 dock 图标(使用 NSInformationalRequest 级别),而 flashFrame(false) 不执行任何操作。新行为:持续闪烁,直到调用 flashFrame(false)。这使用 NSCriticalRequest 级别。要显式使用 NSInformationalRequest 以导致单个 dock 图标弹跳,仍然可以使用 dock.bounce('informational')

28.x.y 版本停止支持

根据项目的 支持策略,Electron 28.x.y 已停止支持。鼓励开发者和应用程序升级到较新版本的 Electron。

E31 (24 年 6 月)E32 (24 年 8 月)E33 (24 年 10 月)
31.x.y32.x.y33.x.y
30.x.y31.x.y32.x.y
28.x.y29.x.y31.x.y

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问计划的重大更改页面。