跳到主要内容

Electron 34.0.0

·3 分钟阅读

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 的问题跟踪器中报告。

重大更改

亮点

  • 添加了 WebFrameMain.collectJavaScriptCallStack(),用于访问无响应渲染器的 JavaScript 调用堆栈。#44938
  • 添加了用于管理共享字典的 API,以便使用 Brotli 或 ZStandard 提高压缩效率。新的 API 是 session.getSharedDictionaryUsageInfo()session.getSharedDictionaryInfo(options)session.clearSharedDictionaryCache()session.clearSharedDictionaryCacheForIsolationKey(options)#44950

堆栈更改

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 的生态系统工作组决定将所有软件包升级到最早支持同步 ESM 图的 require() 的 Node 版本(请参阅 nodejs/node#51977nodejs/node#53500),升级时间将在该版本达到其 LTS 日期之后。

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

我需要采取什么行动?

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

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

下一步是什么?

如果您有任何问题或疑虑,请随时发送邮件至 [email protected] 联系我们。您还可以在我们的官方 Electron Discord 中找到社区支持。

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

·阅读时长一分钟

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

via GIPHY


12 月份哪些内容将保持不变?

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

12 月份哪些内容将有所不同?

  1. 2024 年的最后一个稳定分支版本,包括 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,应用程序不仅为即将到来的更新做好了准备,而且还从长远来看减少了代码复杂性和潜在的错误。

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

迁移步骤

1. 将 Electron 升级到 30.0.0 或更高版本

警告

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

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

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

提示

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

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 将有助于我们更好地分类您的问题!

恭喜,您已迁移到 WebContentsView!🎉

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 上运行,但运行 Electron v33.0.0 及更高版本需要 macOS 11 (Big Sur) 或更高版本。

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

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

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

由于 Chromium 中为支持 非特殊方案 URL 所做的更改,使用 Windows 文件路径的自定义协议 URL 将不再能与已弃用的 protocol.registerFileProtocolBrowserWindow.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');

行为变更:apploginwebContents 属性

applogin 事件为来自使用 respondToAuthRequestsFromMainProcess 选项创建的 实用程序进程 的请求触发时,其中的 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 (2024 年 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 文件 API 中删除了非标准的 File.path 扩展。#42053
  • 当尝试在阻止的路径中打开文件或目录时,使 Web 文件系统 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
  • cumulativeCPUUsage 属性添加到 CPUUsage 结构中,该属性返回自进程启动以来使用的 CPU 总时间(秒)。#41819
  • 将以下现有的导航相关 API 添加到 webContents.navigationHistorycanGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear#41752
  • 扩展了 WebContentsView 以接受预先存在的 webContents 对象。#42086
  • nativeTheme 添加了一个新的属性 prefersReducedTransparency,该属性指示用户是否已选择通过系统辅助功能设置来降低 OS 级别的透明度。#43137
  • 当尝试在阻止的路径中打开文件或目录时,使文件系统访问 API 中的失败路径与上游对齐。#42993
  • 在 Linux 上启用了 Windows 控制覆盖 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);

29.x.y 版本停止支持

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

E32 (2024 年 8 月)E33 (2024 年 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 (在 29, 30 中也有)

重大更改

已移除: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 (2024 年 6 月)E32 (2024 年 8 月)E33 (2024 年 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 的公共时间线

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

Electron 30.0.0

·阅读时长 4 分钟

Electron 30.0.0 已发布!它包括对 Chromium 124.0.6367.49、V8 12.4 和 Node.js 20.11.1 的升级。


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

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

重大更改

亮点

  • Windows 上现在支持 ASAR 完整性熔断器(#40504
    • 如果配置不正确,启用 ASAR 完整性的现有应用程序可能无法在 Windows 上运行。使用 Electron 打包工具的应用程序应升级到 @electron/[email protected]@electron/[email protected]
    • 请查看我们的 ASAR 完整性教程 以获取更多信息。
  • 添加了 WebContentsViewBaseWindow 主进程模块,弃用并替换了 BrowserView (#35658)。在此博客文章中了解有关如何从 BrowserView 迁移到 WebContentsView 的更多信息。
    • BrowserView 现在是 WebContentsView 的垫片,并且旧的实现已被删除。
    • 请参阅我们的 Web Embeds 文档,了解新的 WebContentsView API 与其他类似 API 的比较。
  • 实现了对 File System API 的支持 (#41827)

堆栈更改

Electron 30 将 Chromium 从 122.0.6261.39 升级到 124.0.6367.49,Node 从 20.9.0 升级到 20.11.1,V8 从 12.2 升级到 12.4

新功能

  • 向 webview 添加了 transparent webpreference。(#40301
  • 在 webContents API 上添加了一个新的实例属性 navigationHistory,以及 navigationHistory.getEntryAtIndex 方法,使应用程序能够检索浏览历史记录中任何导航条目的 URL 和标题。(#41662
  • 添加了新的 BrowserWindow.isOccluded() 方法,允许应用程序检查遮挡状态。(#38982
  • 添加了从实用程序进程使用 net 模块发出的请求的代理配置支持。(#41417
  • 添加了在 navigator.serial 中通过服务类 ID 请求蓝牙端口的支持。(#41734
  • 添加了对 Node.js NODE_EXTRA_CA_CERTS CLI 标志的支持。(#41822

重大更改

行为变更:跨域 iframe 现在使用权限策略来访问功能

跨域 iframe 现在必须通过 allow 属性指定给定 iframe 可用的功能才能访问它们。

有关更多信息,请参阅文档

已移除:--disable-color-correct-rendering 命令行开关

此开关从未正式记录在案,但无论如何在此处注明其移除。 Chromium 本身现在对颜色空间有更好的支持,因此不需要此标志。

行为变更:macOS 上的 BrowserView.setAutoResize 行为

在 Electron 30 中,BrowserView 现在是新的 WebContentsView API 的包装器。

以前,BrowserView API 的 setAutoResize 函数由 macOS 上的自动调整大小以及 Windows 和 Linux 上的自定义算法支持。对于诸如使 BrowserView 填充整个窗口之类的简单用例,这两种方法的行为是相同的。但是,在更高级的情况下,BrowserView 在 macOS 上会自动调整大小,与其他平台上的调整方式不同,因为 Windows 和 Linux 的自定义调整大小算法与 macOS 的自动调整大小 API 的行为并不完全匹配。自动调整大小行为现在在所有平台上都是标准化的。

如果您的应用使用 BrowserView.setAutoResize 来执行比使 BrowserView 填充整个窗口更复杂的操作,那么您可能已经有自定义逻辑来处理 macOS 上行为的差异。如果是这样,那么 Electron 30 中将不再需要该逻辑,因为自动调整大小的行为是一致的。

已移除:WebContentscontext-menuparams.inputFormType 属性

已删除来自 WebContentscontext-menu 事件中 params 对象的 inputFormType 属性。请改用新的 formControlType 属性。

已移除:process.getIOCounters()

Chromium 已移除对此信息的访问。

27.x.y 版本停止支持

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

E30 (2024 年 4 月)E31 (2024 年 6 月)E32 (2024 年 8 月)
30.x.y31.x.y32.x.y
29.x.y30.x.y31.x.y
28.x.y29.x.y30.x.y

下一步

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

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

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

Google 编程之夏 2024

·阅读时长 4 分钟

我们很高兴地宣布 Electron 已被接受为 2024 年第 20 版 Google Summer of Code (GSoC) 的指导组织! Google Summer of Code 是一项全球性计划,致力于将新的贡献者引入开源软件开发。

有关更多项目详情,请查看 Google 的 Summer of Code 首页

关于我们

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

在 Electron 核心之外,我们还致力于各种项目,以帮助维持 Electron 组织的运作,例如

作为 Summer of Code 的贡献者,您将与 Electron 的一些核心贡献者在 github.com/electron 下的众多项目之一上进行合作。

申请前须知

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

要了解有关 Electron 应用分发的更多信息,您还可以通过创建一个示例应用程序来试用 Electron Forge

npm init electron-app@latest my-app

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

信息

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

起草提案

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

有其他您希望我们考虑的想法?我们也接受不在拟议项目列表中的新想法,但请确保您的方案已彻底概述和详细说明。如有疑问,我们建议您坚持使用我们列出的想法。

您的申请应包括

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

此处提供了关于如何提交 Electron 申请的详细指南。直接向 Google Summer of Code 门户提交提案。请注意,发送给 Electron 团队的电子邮件提案(而不是通过申请门户提交的提案)将不被视为最终提交。

如果您想获得有关提案的更多指导,或者不确定要包含什么内容,我们还建议您遵循此处的官方 Google Summer of Code 提案撰写建议

申请将于2024 年 3 月 18 日开始,并于2024 年 4 月 2 日结束。

信息

我们 2022 年的 Google Summer of Code 实习生 @aryanshridhar 做得很棒!如果您想了解 Aryan 在 Electron 的夏季工作内容,可以在 2022 GSoC 项目档案中阅读他的报告。

有问题吗?

如果您有我们在博客文章中没有解决的问题,或者对您的提案草案有疑问,请发送电子邮件至 [email protected] 或查看 GSoC 常见问题解答

资源