Electron 37.0.0
Electron 37.0.0 已发布!其中包括对 Chromium 138、V8 13.8 和 Node 22.16.0 的升级。
Electron 团队很高兴地宣布发布 Electron 37.0.0!您可以通过 npm install electron@latest
使用 npm 安装它,或从我们的 发布网站 下载。请继续阅读以了解此发布的详细信息。
如果您有任何反馈,请通过 Bluesky 或 Mastodon 与我们分享,或加入我们的社区 Discord!Bug 和功能请求可以在 Electron 的 问题跟踪器 中报告。
重要变更
平滑圆角:原生 CSS 圆角矩形
Electron 37 引入了自定义 -electron-corner-smoothing
CSS 属性,该属性允许应用程序创建更平滑的圆角,以匹配 Apple 的 macOS 设计语言。此功能最初是在 Electron 36 中实现的,但我们认为它值得更受关注。
代码 | 结果 |
---|---|
|
与标准的 border-radius
属性不同,该属性会从矩形中裁剪出四分之一圆角,-electron-corner-smoothing
会将曲线平滑地过渡到 圆角矩形 形状,并具有连续的周长。
您可以使用 0% 到 100% 的值来调整平滑度,或者使用 system-ui
值来匹配操作系统的样式(macOS 上为 60%,其他系统上为 0%)。此设计增强功能可应用于边框、轮廓和阴影,为您的应用程序提供微妙的润色。
详细了解 Electron 的圆角矩形实现,请参阅 @clavin 的 RFC 0012。该文档详细介绍了其动机和技术实现。
最初的设计灵感来自 Figma 的圆角平滑实现。在 “Desperately seeking squircles” 中阅读有关他们对平滑圆角的研究。
技术栈变更
- Chromium
138.0.7204.35
- Node
22.16.0
- V8
13.8
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
添加了innerWidth
和innerHeight
选项。 #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 上菜单项角色
palette
和header
的支持。#47245 - 添加了对 node 选项
--experimental-network-inspection
的支持。 #47031 (也存在于 35、36 中) - 暴露了
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 阻止列表支持
现在,WebUSB 和 Web Serial 支持 Chromium 使用的 WebUSB 阻止列表 和 Web Serial 阻止列表,这些已在各自的规范中进行了概述。
要禁用这些功能,用户可以传递 disable-usb-blocklist
和 disable-serial-blocklist
作为命令行标志。
已移除:ProtocolResponse
中 session
属性的 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.y | 38.x.y | 39.x.y |
36.x.y | 37.x.y | 38.x.y |
35.x.y | 36.x.y | 37.x.y |
下一步计划
短期内,您可以预期团队将继续专注于跟进构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。
您可以在此处找到 Electron 的公开时间线。
有关未来变更的更多信息,请参阅计划中的破坏性变更页面。