跳转到主要内容

Electron 37.0.0

·7分钟阅读

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


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

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

重要变更

平滑圆角:原生 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 则将曲线平滑地过渡到一个 超圆角(squircle)形状,具有连续的周长。

您可以使用 0% 到 100% 的值来调整平滑度,或者使用 system-ui 值来匹配操作系统的样式(macOS 上为 60%,其他系统上为 0%)。此设计增强可应用于边框、轮廓和阴影,为您的应用程序增添微妙的光泽。

提示

@clavinRFC 0012 中了解更多关于 Electron 的超圆角实现。该文档更详细地介绍了动机和技术实现。

最初的设计从 Figma 的圆角平滑实现中汲取灵感。请阅读他们关于对平滑圆角不懈追求的文章 “Desperately seeking squircles”

技术栈变更

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

破坏性变更

实用进程未处理的拒绝行为更改

现在,当发生未处理的拒绝时,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 的公开时间线

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