跳转到主要内容

47 条带有“Release”标签的帖子

关于 Electron 新发布的博客文章

查看所有标签

Electron 39.0.0

·阅读时长 4 分钟

Electron 39.0.0 已发布!它包括对 Chromium 142.0.7444.52、V8 14.2 和 Node 22.20.0 的升级。


Electron 团队很高兴地宣布 Electron 39.0.0 发布!您可以通过 npm 使用 npm install electron@latest 进行安装,或从我们的发布网站下载。请继续阅读以获取此版本的详细信息。

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

重要变更

技术栈变更

Electron 39 将 Chromium 从 140.0.7339.41 升级到 142.0.7444.52,将 Node.js 从 22.18.0 升级到 v22.20.0,将 V8 从 14.0 升级到 14.2

ASAR 完整性功能升级为稳定版

一个长期存在的“实验性”功能——ASAR 完整性——现在在 Electron 39 中稳定了。当您启用此功能时,它会在运行时根据构建时哈希验证您打包的 app.asar,以检测任何篡改。如果不存在哈希或哈希不匹配,应用程序将强制终止。

有关此功能如何工作、如何在您的应用程序中使用以及如何在 Electron Forge 和 Electron Packager 中使用的完整信息,请参阅ASAR 完整性文档

在相关新闻中,Electron Packager v19 现在默认启用 ASAR。#1841

新特性与改进

  • 添加了 app.isHardwareAccelerationEnabled()#48680
  • 为离屏渲染添加了支持 scRGB HDR 颜色空间的 RGBAF16 输出格式。#48504
  • 添加了用于启用更精细辅助功能支持管理的方法。#48625
  • 添加了对 USBDevice.configurations 的支持。#47459
  • 添加了使用 systemPreferences.getAccentColor 在 Linux 上检索系统主题色的功能。#48628
  • 允许在给定会话中持久化文件系统 API 授予状态。#48326 (也在37, 38 中)
  • 在非上下文隔离的预加载脚本中支持动态 ESM 导入。#48488 (也在37, 38 中)
  • ASAR 完整性功能标记为稳定版。它以前是实验性的。#48434

破坏性变更

已弃用:--host-rules 命令行开关

Chromium 正在弃用 --host-rules 开关。

您应该改用 --host-resolver-rules

行为变更:window.open 弹窗始终可调整大小

根据当前的 WHATWG 规范window.open API 现在将始终创建可调整大小的弹窗。

要恢复以前的行为

webContents.setWindowOpenHandler((details) => {
return {
action: 'allow',
overrideBrowserWindowOptions: {
resizable: details.features.includes('resizable=yes'),
},
};
});

行为变更:共享纹理 OSR paint 事件数据结构

使用共享纹理离屏渲染功能时,paint 事件现在会发出一个更结构化的对象。它将 sharedTextureHandleplanesmodifier 移入统一的 handle 属性。有关更多详细信息,请参阅OffscreenSharedTexture 文档

36.x.y 版本停止支持

根据项目支持政策,Electron 36.x.y 已达到停止支持的期限。建议开发者和应用程序升级到较新版本的 Electron。

E39 (25年10月)E40(26 年 1 月)E41 (26年2月)
39.x.y40.x.y41.x.y
38.x.y39.x.y40.x.y
37.x.y38.x.y39.x.y

下一步计划

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

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

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

Electron 38.0.0

·阅读时长 5 分钟

Electron 38.0.0 已发布!它包括 Chromium 140.0.7339.41、V8 14.0 和 Node 22.16.0 的升级。


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

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

重要变更

技术栈变更

Electron 38 将 Chromium 从 138.0.7204.35 升级到 140.0.7339.41,Node 从 22.16.0 升级到 22.18.0,V8 从 13.8 升级到 14.0

新特性与改进

  • 新增支持自定义系统强调色和活动窗口边框高亮显示。#47285(也包含在 37 中)
  • 在 macOS 上为 process.getSystemMemoryInfo() 添加了 fileBackedpurgeable 字段。#48146(也包含在 37 中)
  • 在 macOS 上为 Tray 构造函数选项添加了 guid 支持,以允许托盘图标在启动后保持位置。#48077(也包含在 37 中)
  • 添加了 webFrameMain.fromFrameToken(processId, frameToken) 以从其帧令牌获取 WebFrameMain 实例。#47942
  • 在 Windows 和 macOS 上添加了对 app.getRecentDocuments() 的支持。#47924(也包含在 37 中)
  • 内部切换到使用 DIR_ASSETS 而不是 DIR_MODULE/DIR_EXE 来定位资产和资源,并添加了“assets”作为可以通过 app.getPath 查询的键。#47950(也包含在 37 中)
  • 修复了 dialog.showMessageDialog 在传入父窗口时,错误地将窗口居中显示在监视器而非父窗口的问题。#48215
  • 修复了 macOS 用户无法与通过 loadURL 加载的网页交互的问题。#47575

破坏性变更

已移除:macOS 11 支持

Chromium 不再支持 macOS 11 (Big Sur)。

旧版本的 Electron 将继续在 Big Sur 上运行,但运行 Electron v38.0.0 及更高版本需要 macOS 12 (Monterey) 或更高版本。

已移除:ELECTRON_OZONE_PLATFORM_HINT 环境变量

--ozone-plaftform 标志的默认值已更改为 auto

您应该使用 XDG_SESSION_TYPE=wayland 环境变量来使用 Wayland。

已移除:plugin-crashed 事件

webContents 中的 plugin-crashed 事件已移除。

已弃用:webFrame.routingId 属性

webFrame 对象中的 routingId 属性将被移除。

您应该使用 webFrame.frameToken 代替。

已弃用:webFrame.findFrameByRoutingId(routingId)

webFrame.findFrameByRoutingId(routingId) 函数将被移除。

您应该使用 webFrame.findFrameByToken(frameToken) 代替。

Google 编程之夏活动结束

我们的两名 Google 编程之夏贡献者刚刚完成了他们的夏季项目!

  • @nilayarya 在 Electron 核心中创建了一个新的保存/恢复窗口状态 API。新的 API 将提供一种内置的、标准化的方式来处理窗口状态持久性。请参阅 Nilay 的原始 RFC:electron/rfcs#16
  • @hitarth-gg 投入了大量精力,使用 Chrome Manifest V3 API 现代化了长期休眠的 Devtron 扩展。这个项目为开发人员提供了调试 IPC 通信、跟踪事件监听器以及可视化其 Electron 应用程序中的模块依赖项的工具。

请继续关注更详细的博客文章,其中将概述他们的项目和成果。

35.x.y 版本停止支持

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

E38(25 年 9 月)E39 (25年10月)E40(26 年 1 月)
38.x.y39.x.y40.x.y
37.x.y38.x.y39.x.y
36.x.y37.x.y38.x.y

下一步计划

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

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

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

Electron 37.0.0

·7分钟阅读

Electron 37.0.0 已发布!其中包括对 Chromium 138、V8 13.8 和 Node 22.16.0 的升级。


Electron 团队很高兴地宣布 Electron 37.0.0 发布!您可以通过 npm 安装它,运行 npm install electron@latest,或者从我们的发布网站下载。请继续阅读以获取此版本的详细信息。

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

重要变更

平滑圆角:原生 CSS 圆角矩形

An image showing different corner smoothing values (0%, 30%, 60%, and 100%) applied to rectangles, with 60% labeled as matching macOS style

Electron 37 引入了自定义的 -electron-corner-smoothing CSS 属性,它允许应用程序创建更平滑的圆角以匹配 Apple 的 macOS 设计语言。此功能最初在 Electron 36 中推出,但我们认为它值得更亮的聚光灯。

100% 圆角平滑示例

代码结果
.box {
width: 128px;
height: 128px;
border-radius: 24px;
-electron-corner-smoothing: 100%;
}

与标准 border-radius 属性不同,后者将四分之一圆形角从矩形中雕刻出来,-electron-corner-smoothing 将曲线平滑地过渡为具有连续周长的圆方形状。

您可以使用 0% 到 100% 的值调整平滑度,或者使用 system-ui 值以匹配操作系统的样式(macOS 上为 60%,否则为 0%)。此设计增强功能可应用于边框、轮廓和阴影,为您的应用程序增添一丝精致。

提示

阅读更多关于 Electron 的圆方实现,请参阅 @clavinRFC 0012。该文档更详细地介绍了动机和技术实现。

最初的设计灵感来自 Figma 的角平滑实现。阅读更多关于他们自己对平滑角的追求,请参阅“苦苦寻找圆方”

技术栈变更

Electron 37 将 Chromium 从 136.0.7103.48 升级到 138.0.7204.35,并将 V8 从 13.6 升级到 13.8

Google Summer of Code 开始

我们的两位 Google Summer of Code 贡献者已经开始了该项目的编码期!

  • @nilayarya 正在 Electron 核心中构建一个新的保存/恢复窗口状态 API。新的 API 将提供一种内置的、标准化的方式来处理窗口状态持久化。请参阅 Nilay 正在进行的 RFC:electron/rfcs#16
  • @hitarth-gg 正在努力使用 Chrome Manifest V3 API 现代化长期休眠的 Devtron 扩展。该项目将为开发人员提供用于调试 IPC 通信、跟踪事件监听器以及可视化其 Electron 应用程序中的模块依赖项的工具。

对于我们的 GSoC 参与者来说,这是激动人心的几周,敬请期待更多更新!

新特性与改进

  • window.open 添加了 innerWidthinnerHeight 选项。#47039(也在35, 36中)
  • 添加了 before-mouse-event 以允许在 webContents 中拦截和阻止鼠标事件。#47364(也在36中)
  • ServiceWorkerMain 添加了 scriptURL 属性。#45863
  • 为 macOS >= 14.4 的菜单添加了 sublabel 功能。#47042(也在35, 36中)
  • 添加了对 HIDDevice.collections 的支持。#47483(也在36中)
  • 添加了对 --no-experimental-global-navigator 标志的支持。#47418(也在35, 36中)
  • 在 Linux X11 上添加了对 screen.dipToScreenPoint(point)screen.screenToDipPoint(point) 的支持。#46895(也在35, 36中)
  • 增加了对 macOS 上菜单项角色 paletteheader 的支持。#47245
  • 添加了对 node 选项 --experimental-network-inspection 的支持。#47031(也在35, 36中)
  • 公开了 win.isContentProtected(),允许开发人员检查窗口保护状态。#47310(也在36中)

破坏性变更

Utility Process 未处理的拒绝行为变更

现在,当发生未处理的拒绝时,Utility Process 将会发出一条错误消息警告,而不是使进程崩溃。

要恢复以前的行为,您可以使用

process.on('unhandledRejection', () => {
process.exit(1);
});

行为变更:process.exit() 同步终止实用程序进程

在实用工具进程中调用 process.exit() 现在将同步终止该进程。这使得 process.exit() 的行为与 Node.js 的行为保持一致。

请参阅 Node.js 文档PR #45690,以了解其潜在影响,例如在调用 console.log() 之前调用 process.exit() 时。

行为变更:WebUSB 和 WebSerial 黑名单支持

WebUSBWeb Serial 现在支持 Chromium 使用的 WebUSB 黑名单Web Serial 黑名单,并在各自的规范中列出。

要禁用这些功能,用户可以传递 disable-usb-blocklistdisable-serial-blocklist 作为命令行标志。

已移除:ProtocolResponsesession 属性的 null

这个已弃用的功能已被移除。

以前,将 ProtocolResponse.session 属性设置为 null 会创建一个随机的独立会话。这已不再受支持。

由于开销成本,不建议在此处使用单用途会话;但是,需要保留此行为的旧代码可以通过使用 session.fromPartition(some_random_string) 创建一个随机会话,然后在 ProtocolResponse.session 中使用它来模拟此行为。

行为变更:Linux 上 BrowserWindow.IsVisibleOnAllWorkspaces()

如果窗口当前不可见,BrowserWindow.IsVisibleOnAllWorkspaces() 现在在 Linux 上将返回 false。

停止支持 34.x.y

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

E37 (25年6月)E38 (25年8月)E39 (25年10月)
37.x.y38.x.y39.x.y
36.x.y37.x.y38.x.y
35.x.y36.x.y37.x.y

下一步计划

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

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

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

Electron 36.0.0

·阅读时长 5 分钟

Electron 36.0.0 已发布!它包含了对 Chromium 136、V8 13.6 和 Node 22.14.0 的升级。


Electron 团队很高兴地宣布 Electron 36.0.0 发布!您可以通过 npm 安装它,运行 npm install electron@latest,或者从我们的发布网站下载。请继续阅读以获取此版本的详细信息。

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

重要变更

写作工具支持

在 Electron 36 中,您可以在上下文菜单中启用 macOS 系统级功能,例如书写工具(拼写和语法)、自动填充和服务菜单项。为此,请将 WebFrameMain 实例传递给 menu.popup()frame 参数。

import { BrowserWindow, Menu, WebFrameMain } from 'electron';

const currentWindow = BrowserWindow.getFocusedWindow();
const focusedFrame = currentWindow.webContents.focusedFrame;
const menu = Menu.buildFromTemplate([{ label: 'Copy', role: 'copy' }]);

menu.popup({
window: currentWindow,
frame: focusedFrame,
});

技术栈变更

Electron 36 将 Chromium 从 134.0.6998.23 升级到 136.0.7103.48,并将 V8 从 13.5 升级到 13.6

新特性与改进

  • 添加了 BrowserWindow.isSnapped() 来指示给定窗口是否已通过 Windows 上的贴靠功能进行排列。#46226
  • 添加了 WebContents.focusedFrame 来获取当前获得焦点的 frame。
  • 修复了 WebContents.opener,以明确其可能为 null 类型。#45667
  • ffmpeg.dll 添加到延迟加载配置中。#46173(也在34, 35中)
  • 添加了 nativeTheme.shouldUseDarkColorsForSystemIntegratedUI 以区分系统和应用程序主题。#46598(也在35中)
  • webRequest 过滤器添加了 excludeUrls,并弃用了在 urls 属性中使用空数组。#44692(也在35中)
  • 通过 menu.popup 中的新 frame 选项,在上下文菜单中添加了对自动填充、书写工具和 macOS 级别服务菜单项的支持。#46350
  • 在 Linux 上添加了对 system-context-menu 的支持。#46399
  • 改进了 Windows 上的 ASAR 完整性检查。#46537
  • 在 macOS 上不请求缩略图时,改进了 desktopCapturer.getSources 的性能。#46251(也在34, 35中)
  • 使用共享纹理 OSR 时移除了 240 FPS 限制。#45669(也在35中)

破坏性变更

已弃用:NativeImage.getBitmap()

NativeImage.getBitmap() 函数现已弃用,并被记录为 NativeImage.toBitmap() 的别名。这两个函数都返回一个新分配的位图副本,并且功能上是等效的。

已弃用:session 上的扩展方法和事件

session.loadExtensionsession.removeExtensionsession.getExtensionsession.getAllExtensions 以及事件 extension-loadedextension-unloadedextension-ready 都已移至可通过 session.extensions 实例属性访问的新 Extensions 对象

已移除:session.clearStorageData(options) 中的 quota 类型 syncable

调用 session.clearStorageData(options) 时,options.quota 类型 syncable 不再受支持,因为它已从上游 Chromium 移除

已弃用:session.clearStorageData(options) 中的 quota 属性

调用 Session.clearStorageData(options) 时,options.quota 属性已被弃用。由于 syncable 类型已被移除,现在只剩下一种类型——'temporary'——因此没有必要再指定它。

行为变更:在 GNOME 上运行时 GTK 4 成为默认

经过一次上游变更后,在 GNOME 上运行时,现在默认使用 GTK 4。

在极少数情况下,这可能会导致某些应用程序或配置出错,并显示以下消息:

Gtk-ERROR **: 11:30:38.382: GTK 2/3 symbols detected. Using GTK 2/3 and GTK 4 in the same process is not supported

受影响的用户可以通过指定 gtk-version 命令行标志来解决此问题:

$ electron --gtk-version=3   # or --gtk-version=2

同样的操作也可以通过 app.commandLine.appendSwitch 函数完成。

行为变更:app.commandLine

app.commandLine 会将大写的开关和参数转换为小写。

app.commandLine 原本只用于处理 Chromium 开关(这些开关不区分大小写),并且通过 app.commandLine 传递的开关不会传递给任何子进程。

如果您之前使用 app.commandLine 来解析特定于应用的命令行参数,您应该改为通过 process.argv 来实现。

停止支持 33.x.y 版本

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

E36 (25年4月)E37 (25年6月)E38 (25年8月)
36.x.y37.x.y38.x.y
35.x.y36.x.y37.x.y
34.x.y35.x.y36.x.y

下一步计划

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

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

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

Electron 35.0.0

·6 分钟阅读

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!Bug 和功能请求可以在 Electron 的问题追踪器中报告。

重要变更

用于改进扩展支持的服务工作线程预加载脚本

最初由 @samuelmaddockRFC #8 中提出,Electron 35 增加了向 Service Workers 附加预加载脚本的功能。由于 Chrome 的 Manifest V3 扩展通过扩展服务工作线程处理大量工作,此功能填补了 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 Worker 及其附加的预加载脚本之间通过 ServiceWorkerMain.ipc 类进行。预加载脚本仍将使用 ipcRenderer 模块与其 Service Worker 进行通信。有关更多详细信息,请参阅原始 RFC。

此功能之前有许多其他更改为其奠定了基础

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

技术栈变更

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 Worker 交互。#45341
    • ServiceWorkers 上添加了 running-status-changed 事件,用于指示 Service Worker 的运行状态何时发生变化。
    • ServiceWorkers 上添加了 startWorkerForScope,用于启动先前可能已停止的 Worker。
  • 添加了实验性的 contextBridge.executeInMainWorld,用于安全地跨世界边界执行代码。#45330
  • 'console-message' 事件中添加了 frame#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+,在这些系统中 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 的公开时间线

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

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!Bug 和功能请求可以在 Electron 的问题追踪器中报告。

重要变更

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 的公开时间线

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

Electron 33.0.0

·阅读时长 5 分钟

Electron 33.0.0 现已发布!此版本升级到了 Chromium 130.0.6723.44、V8 13.0 和 Node 20.18.0。


Electron 团队很高兴地宣布发布 Electron 33.0.0!您可以通过 npm install electron@latest 使用 npm 进行安装,或者从我们的 发布网站 下载。请继续阅读以获取此版本详情。

如果您有任何反馈,请在 TwitterMastodon 上与我们分享,或者加入我们的社区 Discord!Bug 和功能请求可以在 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
  • 在 utility process 中添加了 error 事件,以支持对 V8 致命错误的诊断报告。#43997
  • 添加了 View.setBorderRadius(radius),用于自定义视图的边框圆角,并兼容 WebContentsView#42320
  • 扩展了 navigationHistory API,新增了 2 个函数以实现更好的历史记录管理。#42014

破坏性变更

移除:对 macOS 10.15 的支持

Chromium 不再支持 macOS 10.15 (Catalina)。

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

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

由于上游的变更,V8Node.js 现在都需要 C++20 作为最低版本。使用原生 Node.js 模块的开发者应该使用 --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` 属性

当 `app` 的 `login` 事件由使用 respondToAuthRequestsFromMainProcess 选项创建的 utility process 触发请求时,`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 的公开时间线

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

Electron 32.0.0

·阅读时长 5 分钟

Electron 32.0.0 已发布! 此版本包含了对 Chromium 128.0.6613.36、V8 12.8 和 Node 20.16.0 的升级。


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

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

重要变更

亮点

  • 在我们的文档中新增了 API 版本历史,这项功能由 @piotrpdev 作为 Google Summer of Code 的一部分创建。您可以在这篇博文中了解更多信息。 #42982
  • 从 Web File 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,它指示用户是否已通过系统辅助功能设置选择降低操作系统级别的透明度。#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);

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

如果您在 app.getPath('userData') 返回的目录中有一个名为 databases 的目录,它将在 Electron 32 首次运行时被删除。databases 目录曾被 WebSQL 使用,该功能已在 Electron 31 中移除。Chromium 现在执行一项清理操作,会删除此目录。请参阅问题 #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

·阅读时长 4 分钟

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


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

如果您有任何反馈,请在 TwitterMastodon 上与我们分享,或者加入我们的社区 Discord!Bug 和功能请求可以在 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 标准 文件系统 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 的公开时间线

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

Electron 30.0.0

·阅读时长 5 分钟

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


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

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

重要变更

亮点

  • ASAR 完整性保险丝现在在 Windows 上受支持 (#40504)
    • 如果配置不正确,现有已启用 ASAR 完整性的应用程序可能无法在 Windows 上运行。使用 Electron 打包工具的应用程序应升级到 @electron/packager@18.3.1@electron/forge@7.4.0
    • 请查看我们的ASAR 完整性教程以获取更多信息。
  • 添加了主进程模块 WebContentsViewBaseWindow,同时弃用并替换了 BrowserView (#35658)。请参阅 这篇博文 了解如何从 BrowserView 迁移到 WebContentsView
    • BrowserView 现在是 WebContentsView 的一个垫片,旧的实现已被移除。
    • 请参阅我们的 Web 嵌入文档,了解新的 WebContentsView API 与其他类似 API 的比较。
  • 实现了对 文件系统 API 的支持 (#41822)

技术栈变更

  • Chromium 124.0.6367.49
    • Chrome 124 新增功能,以及 DevTools 124 新增功能
    • Chrome 123 新增功能,以及 DevTools 123 新增功能
  • Node 20.11.1
  • V8 12.4

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)
  • 为从 utility 进程发出的 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 的一个包装器。

之前,macOS 上的 BrowserView API 的 setAutoResize 函数是基于 autoresizing 实现的,而在 Windows 和 Linux 上则使用自定义算法。对于使 BrowserView 充满整个窗口等简单用例,这两种方法的行为是相同的。但是,在更复杂的场景下,BrowserView 在 macOS 上的 autoresize 方式与其他平台不同,因为 Windows 和 Linux 的自定义调整大小算法并未完全匹配 macOS 的 autoresizing API 的行为。现在,所有平台的 autoresize 行为已统一。

如果您的应用程序使用 BrowserView.setAutoResize 来执行比让 BrowserView 充满整个窗口更复杂的操作,那么您可能已经实现了自定义逻辑来处理 macOS 上的这种行为差异。如果是这样,在 Electron 30 中,由于 autoresize 行为已一致,这些自定义逻辑将不再需要。

已移除:WebContentscontext-menuparams.inputFormType 属性

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

已移除:process.getIOCounters()

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

27.x.y 版本支持结束

根据项目的 支持策略,Electron 27.x.y 已结束支持。我们鼓励开发人员和应用程序升级到更新的 Electron 版本。

E30 (24年4月)E31 (24年6月)E32 (24年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 的公开时间线

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