跳到主内容

44 篇标记为“发布”的帖子

关于新 Electron 版本的博客帖子

查看所有标签

Electron 36.0.0

·阅读 4 分钟

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!错误和功能请求可在 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 Snap 排列。#46226
  • 添加了 WebContents.focusedFrame,用于获取焦点帧。
  • 修复了 WebContents.opener 以指定可能的 null 类型。#45667
  • 添加了 ffmpeg.dll 到延迟加载配置。#46173 (也在 34, 35 中)
  • 添加了 nativeTheme.shouldUseDarkColorsForSystemIntegratedUI,用于区分系统和应用主题。#46598 (也在 35 中)
  • excludeUrls 添加到 webRequest 过滤器中,并弃用了在 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 都已移至新的 Extensions 对象,该对象可通过 session.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

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

使用 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.y
35.x.yE38 (25年8月)36.x.y
34.x.y35.x.yE38 (25年8月)

展望未来

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

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

关于未来变更的更多信息可在计划中的重大变更页面上找到。

Electron 35.0.0

·阅读 5 分钟

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

重要变更

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

最初由 @samuelmaddockRFC #8 中提出,Electron 35 添加了将预加载脚本附加到服务工作线程的功能。随着 Chrome Manifest V3 扩展将大量工作路由到扩展服务工作线程,此功能填补了 Electron 对现代 Chrome 扩展支持的空白。

在会话级别以编程方式注册预加载脚本时,您现在可以使用 ses.registerPreloadScript(script) API 特别将其应用于服务工作线程上下文。

主进程
// 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'),
});

此外,服务工作线程及其附加的预加载脚本现在可以通过 ServiceWorkerMain.ipc 类进行 IPC 通信。预加载脚本仍将使用 ipcRenderer 模块与其服务工作线程通信。更多详细信息请参阅原始 RFC。

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

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

技术栈变更

Electron 35 将 Chromium 从 132.0.6834.83 升级到 134.0.6998.44,将 Node 从 20.18.1 升级到 22.14.0,将 V8 从 13.2 升级到 13.5

新特性

  • NSPrefersDisplaySafeAreaCompatibilityMode = false 添加到 Info.plist 中,以从应用选项中移除“适应内置摄像头下方区域缩放”。#45357 (也在 v34.1.0 中)
  • 添加了 ServiceWorkerMain 类,用于在主进程中与服务工作线程交互。#45341
    • ServiceWorkers 上添加了 running-status-changed 事件,用于指示服务工作线程的运行状态何时发生变化。
    • ServiceWorkers 上添加了 startWorkerForScope,用于启动可能先前已停止的工作线程。
  • 添加了实验性 contextBridge.executeInMainWorld,用于安全地跨世界边界执行代码。#45330
  • frame 添加到 `'console-message'` 事件中。#43617
  • 添加了 query-session-end 事件,并改进了 Windows 上的 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 中)
  • 添加了对服务工作线程预加载脚本的支持。#45408
  • 支持 Portal 的 globalShortcuts。必须使用 --enable-features=GlobalShortcutsPortal 运行 Electron 才能使该功能生效。#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

行为变更:`WebRequestFilter` 的 `urls` 属性。

之前,空 `urls` 数组被解释为包含所有 URL。现在,为了明确包含所有 URL,开发者应使用 `` 模式,这是一个指定的 URL 模式,匹配所有可能的 URL。此更改澄清了意图并确保了更可预测的行为。

// Deprecated
const deprecatedFilter = {
urls: [],
};

// Replace with
const newFilter = {
urls: ['<all_urls>'],
};

已弃用:systemPreferences.isAeroGlassEnabled()

systemPreferences.isAeroGlassEnabled() 函数已弃用,没有替代。自 Electron 23(仅支持 Windows 10+)以来,它一直返回 true,在这些系统中 DWM composition 不能再被禁用。

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月)根据项目的支持策略,Electron 33.x.y 已停止支持。建议开发者和应用升级到更高版本的 Electron。E36 (25年4月)
35.x.yE38 (25年8月)36.x.y
34.x.y35.x.yE38 (25年8月)
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!错误和功能请求可在 Electron 的问题跟踪器中报告。

重要变更

HTTP 压缩共享字典管理 API

HTTP 压缩允许网页服务器在数据发送到浏览器之前对其进行压缩。现代版本的 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
  • 在 utility process 中添加了错误事件,以支持 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.yE38 (25年8月)
33.x.y34.x.y35.x.y
32.x.y33.x.y34.x.y

展望未来

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

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

关于未来变更的更多信息可在计划中的重大变更页面上找到。

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
  • 在 utility process 中添加了 error 事件,以支持 V8 致命错误的诊断报告。#43997
  • 添加了 View.setBorderRadius(radius),用于自定义视图的边框半径——兼容 WebContentsView#42320
  • 扩展了 navigationHistory API,增加了 2 个新函数,用于更好的历史管理。#42014

重大变更

已移除:macOS 10.15 支持

Chromium 不再支持 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 中为支持 Non-Special Scheme URLs 所做的更改,使用 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');

行为变更:applogin 事件中的 webContents 属性

当事件由使用 respondToAuthRequestsFromMainProcess 选项创建的utility process 中的请求触发时,applogin 事件中的 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

·阅读 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 File API 中删除了非标准的 File.path 扩展。#42053
  • 在尝试打开被阻止路径中的文件或目录时,将 Web 文件系统 API 中的失败路径与上游对齐。#42993
  • 将以下现有的导航相关 API 添加到 webcontents.navigationHistory 中:canGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear。以前的导航 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' 事件响应 utility process 启动的 auth 请求的支持。#43317
  • 添加了 cumulativeCPUUsage 属性到 CPUUsage 结构,该属性返回自进程启动以来使用的总 CPU 时间秒数。#41819
  • 将以下现有的导航相关 API 添加到 webContents.navigationHistorycanGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear#41752
  • 扩展了 WebContentsView 以接受预先存在的 webContents 对象。#42086
  • nativeTheme 添加了新的属性 prefersReducedTransparency,该属性指示用户是否已通过系统辅助功能设置选择降低 OS 级别的透明度。#43137
  • 在尝试打开被阻止路径中的文件或目录时,将文件系统访问 API 中的失败路径与上游对齐。#42993
  • 在 Linux 上启用了 Windows Control Overlay 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,而 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

·阅读 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
  • 实现了对网络标准文件系统 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(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

·阅读 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 Integrity fuse (#40504)
    • 如果配置不正确,启用了 ASAR Integrity 的现有应用程序可能无法在 Windows 上工作。使用 Electron 打包工具的应用程序应升级到 @electron/packager@18.3.1@electron/forge@7.4.0
    • 查看我们的ASAR Integrity 教程以获取更多信息。
  • 添加了WebContentsViewBaseWindow 主进程模块,废弃并替换了 BrowserView (#35658)。在此博客文章中了解如何从 BrowserView 迁移到 WebContentsView
    • BrowserView 现在是 WebContentsView 的垫片,旧实现已移除。
    • 请参阅我们的Web Embeds 文档,以比较新的 WebContentsView API 与其他类似 API。
  • 实现了对文件系统 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

新特性

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

重大变更

行为变更:跨域 iframe 现在使用 Permission Policy 访问功能

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

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

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

此开关从未正式记录,但在此仍注明其移除。Chromium 本身现在对色彩空间有更好的支持,因此不再需要此标志。

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

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

之前,BrowserView API 的 setAutoResize 函数在 macOS 上由 autoresizing 支持,在 Windows 和 Linux 上由自定义算法支持。对于简单的用例,例如使 BrowserView 填充整个窗口,这两种方法的行为是相同的。然而,在更复杂的用例中,BrowserView 在 macOS 上的自动调整大小方式与其他平台不同,因为 Windows 和 Linux 的自定义调整大小算法与 macOS 的 autoresizing API 的行为并不完全匹配。现在,自动调整大小的行为已在所有平台上标准化。

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

已移除:WebContentscontext-menu 事件中的 params.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 的公开时间线

关于未来变更的更多信息可在计划中的重大变更页面上找到。

Electron 29.0.0

·阅读 4 分钟

Electron 29.0.0 已发布!它包括对 Chromium 122.0.6261.39、V8 12.2 和 Node.js 20.9.0 的升级。


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

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

重要变更

亮点

  • 添加了新的顶级 webUtils 模块,这是一个渲染器进程模块,提供了一个实用程序层来与 Web API 对象交互。模块中第一个可用的 API 是 webUtils.getPathForFile。Electron 之前对 File.path 的增强偏离了 Web 标准;这个新 API 更符合当前的 Web 标准行为。

技术栈变更

Electron 29 将 Chromium 从 120.0.6099.56 升级到 122.0.6261.39,将 Node 从 18.18.2 升级到 20.9.0,并将 V8 从 12.0 升级到 12.2

新特性

  • 添加了新的 webUtils 模块,一个用于与 Web API 对象交互的实用程序层,以替换 File.path 增强功能。#38776
  • utility process 添加了net 模块。#40890
  • 添加了新的Electron FusegrantFileProtocolExtraPrivileges,它使 file:// 协议选择更安全和限制性的行为,与 Chromium 匹配。#40372
  • protocol.registerSchemesAsPrivileged 中添加了一个选项,允许在自定义 Scheme 中使用 V8 代码缓存。#40544
  • 在 macOS 13.0+ 上,将 app.{set|get}LoginItemSettings(settings) 迁移到使用 Apple 新推荐的底层框架。#37244

重大变更

行为变更:ipcRenderer 不能再通过 contextBridge 发送

尝试通过 contextBridge 发送整个 ipcRenderer 模块作为对象,现在将在桥的接收端生成一个空对象。此更改是为了移除/缓解安全风险。您不应该直接通过桥暴露 ipcRenderer 或其方法。相反,请提供如下所示的安全包装器

contextBridge.exposeInMainWorld('app', {
onEvent: (cb) => ipcRenderer.on('foo', (e, ...args) => cb(args)),
});

已移除:app 上的 renderer-process-crashed 事件

app 上的 renderer-process-crashed 事件已移除。请改用新的 render-process-gone 事件。

// Removed
app.on('renderer-process-crashed', (event, webContents, killed) => {
/* ... */
});

// Replace with
app.on('render-process-gone', (event, webContents, details) => {
/* ... */
});

已移除:WebContents<webview> 上的 crashed 事件

WebContents<webview> 上的 crashed 事件已移除。请改用新的 render-process-gone 事件。

// Removed
win.webContents.on('crashed', (event, killed) => {
/* ... */
});
webview.addEventListener('crashed', (event) => {
/* ... */
});

// Replace with
win.webContents.on('render-process-gone', (event, details) => {
/* ... */
});
webview.addEventListener('render-process-gone', (event) => {
/* ... */
});

已移除:app 上的 gpu-process-crashed 事件

app 上的 gpu-process-crashed 事件已移除。请改用新的 child-process-gone 事件。

// Removed
app.on('gpu-process-crashed', (event, killed) => {
/* ... */
});

// Replace with
app.on('child-process-gone', (event, details) => {
/* ... */
});

对 26.x.y 的支持终止

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

E29(24 年 2 月)E30(24 年 4 月)E31(24 年 6 月)
29.x.y30.x.y31.x.y
28.x.y29.x.y30.x.y
27.x.y28.x.y29.x.y

展望未来

你知道 Electron 最近新增了一个社区征求意见 (RFC) 流程吗?如果你想为框架添加一个功能,RFCs 是一个有用的工具,可以与维护者就其设计展开对话。你也可以在 Pull Requests 中看到即将进行的变更讨论。要了解更多信息,请查阅我们的 Introducing electron/rfcs 博客文章,或者直接查看 electron/rfcs 仓库的 README。

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

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

关于未来变更的更多信息可在计划中的重大变更页面上找到。

Electron 28.0.0

·阅读 3 分钟

Electron 28.0.0 已发布!它包含了对 Chromium 120.0.6099.56、V8 12.0 和 Node.js 18.18.2 的升级。


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

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

重要变更

亮点

  • 实现了对 ECMAScript 模块或 ESM 的支持(什么是 ECMAScript 模块?在此了解更多信息)。这包括在 Electron 本身以及诸如 UtilityProcess API 入口点等区域对 ESM 的支持。请参阅我们的 ESM 文档了解更多详细信息。
  • 除了在 Electron 本身中启用 ESM 支持之外,Electron Forge 也支持使用 ESM 来打包、构建和开发 Electron 应用程序。你可以在 Forge v7.0.0 或更高版本中找到此支持。

技术栈变更

新特性

  • 启用了 ESM 支持。#37535
  • UtilityProcess API 添加了 ESM 入口点。#40047
  • display 对象添加了几个属性,包括 detected, maximumCursorSize, 和 nativeOrigin#40554
  • 在 Linux 上添加了对 ELECTRON_OZONE_PLATFORM_HINT 环境变量的支持。#39792

重大变更

行为变更:WebContents.backgroundThrottling 设置为 false 会影响宿主 BrowserWindow 中的所有 WebContents

WebContents.backgroundThrottling 设置为 false 将禁用 BrowserWindow 中由其显示的所有 WebContents 的帧节流。

已移除:BrowserWindow.setTrafficLightPosition(position)

BrowserWindow.setTrafficLightPosition(position) 已被移除,应改用 BrowserWindow.setWindowButtonPosition(position) API,该 API 接受 null 而不是 { x: 0, y: 0 } 来将位置重置为系统默认值。

// Removed in Electron 28
win.setTrafficLightPosition({ x: 10, y: 10 });
win.setTrafficLightPosition({ x: 0, y: 0 });

// Replace with
win.setWindowButtonPosition({ x: 10, y: 10 });
win.setWindowButtonPosition(null);

已移除:BrowserWindow.getTrafficLightPosition()

BrowserWindow.getTrafficLightPosition() 已被移除,应改用 BrowserWindow.getWindowButtonPosition() API,该 API 在没有自定义位置时返回 null 而不是 { x: 0, y: 0 }

// Removed in Electron 28
const pos = win.getTrafficLightPosition();
if (pos.x === 0 && pos.y === 0) {
// No custom position.
}

// Replace with
const ret = win.getWindowButtonPosition();
if (ret === null) {
// No custom position.
}

已移除:ipcRenderer.sendTo()

ipcRenderer.sendTo() API 已被移除。应替换为在渲染器之间设置 MessageChannel

IpcRendererEventsenderIdsenderIsMainFrame 属性也已被移除。

已移除:app.runningUnderRosettaTranslation

app.runningUnderRosettaTranslation 属性已被移除。请改用 app.runningUnderARM64Translation

// Removed
console.log(app.runningUnderRosettaTranslation);
// Replace with
console.log(app.runningUnderARM64Translation);

结束支持 25.x.y

根据项目的支持策略,Electron 25.x.y 已达到支持终止。鼓励开发者和应用程序升级到更新的 Electron 版本。

E28 (23年12月)E29(24 年 2 月)E30(24 年 4 月)
28.x.y29.x.y30.x.y
27.x.y28.x.y29.x.y
26.x.y27.x.y28.x.y

展望未来

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

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

关于未来变更的更多信息可在计划中的重大变更页面上找到。

Electron 27.0.0

·阅读 3 分钟

Electron 27.0.0 已发布!它包含了对 Chromium 118.0.5993.32、V8 11.8 和 Node.js 18.17.1 的升级。


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

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

重要变更

技术栈变更

重大变更

已移除:macOS 10.13 / 10.14 支持

macOS 10.13 (High Sierra) 和 macOS 10.14 (Mojave) 不再受到 Chromium 支持。

旧版本的 Electron 将继续在这些操作系统上运行,但运行 Electron v27.0.0 及更高版本将需要 macOS 10.15 (Catalina) 或更高版本。

已弃用:ipcRenderer.sendTo()

ipcRenderer.sendTo() API 已被弃用。应替换为在渲染器之间设置 MessageChannel

IpcRendererEventsenderIdsenderIsMainFrame 属性也已被弃用。

已移除:systemPreferences 中的颜色方案事件

以下 systemPreferences 事件已被移除

  • inverted-color-scheme-changed
  • high-contrast-color-scheme-changed

请改用 nativeTheme 模块上的新的 updated 事件。

// Removed
systemPreferences.on('inverted-color-scheme-changed', () => {
/* ... */
});
systemPreferences.on('high-contrast-color-scheme-changed', () => {
/* ... */
});

// Replace with
nativeTheme.on('updated', () => {
/* ... */
});

已移除:webContents.getPrinters

webContents.getPrinters 方法已被移除。请改用 webContents.getPrintersAsync

const w = new BrowserWindow({ show: false });

// Removed
console.log(w.webContents.getPrinters());
// Replace with
w.webContents.getPrintersAsync().then((printers) => {
console.log(printers);
});

已移除:systemPreferences.{get,set}AppLevelAppearancesystemPreferences.appLevelAppearance

systemPreferences.getAppLevelAppearancesystemPreferences.setAppLevelAppearance 方法以及 systemPreferences.appLevelAppearance 属性已被移除。请改用 nativeTheme 模块。

// Removed
systemPreferences.getAppLevelAppearance();
// Replace with
nativeTheme.shouldUseDarkColors;

// Removed
systemPreferences.appLevelAppearance;
// Replace with
nativeTheme.shouldUseDarkColors;

// Removed
systemPreferences.setAppLevelAppearance('dark');
// Replace with
nativeTheme.themeSource = 'dark';

已移除:systemPreferences.getColoralternate-selected-control-text

systemPreferences.getColoralternate-selected-control-text 值已被移除。请改用 selected-content-background

// Removed
systemPreferences.getColor('alternate-selected-control-text');
// Replace with
systemPreferences.getColor('selected-content-background');

新特性

  • 添加了应用程序可访问性透明度设置 API #39631
  • 添加了对 chrome.scripting 扩展 API 的支持 #39675
  • 默认启用 WaylandWindowDecorations #39644

结束支持 24.x.y

根据项目的支持策略,Electron 24.x.y 已达到支持终止。鼓励开发者和应用程序升级到更新的 Electron 版本。

E27 (23年10月)E28 (23年12月)E29(24 年 2 月)
27.x.y28.x.y29.x.y
26.x.y27.x.y28.x.y
25.x.y26.x.y27.x.y

结束对 22.x.y 的延长支持

今年早些时候,Electron 团队将 Electron 22 计划的生命周期结束日期从 2023 年 5 月 30 日延长到 2023 年 10 月 10 日,以配合 Chrome 对 Windows 7/8/8.1 的延长支持(详情请参阅再见,Windows 7/8/8.1)。

根据项目的支持策略和此支持延长,Electron 22.x.y 已达到支持终止。这将使支持回落到最近三个稳定主要版本,并将结束对 Windows 7/8/8.1 的官方支持。

展望未来

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

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

关于未来变更的更多信息可在计划中的重大变更页面上找到。