跳到主要内容

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

显著变化

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

最初由 @samuelmaddockRFC #8 中提出,Electron 35 增加了将预加载脚本附加到 Service Worker 的功能。随着 Chrome 的 Manifest V3 扩展将大量工作通过 扩展 Service Worker 进行路由,此功能填补了 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'),
});

此外,Service Worker 及其附加的预加载脚本之间现在可以通过 ServiceWorkerMain.ipc 类进行 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()
  • 添加了 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 上的 setPreloads, getPreloads

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

有关未来更改的更多信息,请参阅计划中的重大变更页面。