跳到主要内容

43 篇标记为“Release”的文章

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

值得注意的更改

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

最初在 RFC #8 中由 @samuelmaddock 提出,Electron 35 添加了将预加载脚本附加到 Service Workers 的能力。随着 Chrome 的 Manifest V3 Extensions 将大量工作路由到 扩展 Service Workers,此功能填补了 Electron 对现代 Chrome 扩展支持方面的空白。

当在会话级别以编程方式注册预加载脚本时,您现在可以使用 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。必须使用 --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

行为已更改: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+,在 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!错误和功能请求可以在 Electron 的 问题跟踪器 中报告。

值得注意的更改

HTTP 压缩共享字典管理 API

HTTP 压缩允许数据在被浏览器接收之前由 Web 服务器压缩。现代版本的 Chromium 支持 Brotli 和 Zstandard,它们是比 gzip 等旧方案性能更好的新型压缩算法,尤其是在文本文件方面。

自定义共享字典进一步提高了 Brotli 和 Zstandard 压缩的效率。有关更多信息,请参阅 Chrome for Developers 博客关于共享字典的文章

@felixrieseberg#44950 中添加了以下 API,以管理会话级别的共享字典

  • session.getSharedDictionaryUsageInfo()
  • session.getSharedDictionaryInfo(options)
  • session.clearSharedDictionaryCache()
  • session.clearSharedDictionaryCacheForIsolationKey(options)

无响应渲染器 JavaScript 调用堆栈

当渲染器进程挂起过长时间时,会发生 Electron 的 unresponsive 事件。由 @samuelmaddock#44204 中添加的新 WebFrameMain.collectJavaScriptCallStack() API 允许您从关联的 WebFrameMain 对象 (webContnets.mainFrame) 收集 JavaScript 调用堆栈。

在存在长时间运行的 JavaScript 事件导致进程挂起的情况下,此 API 可用于确定帧无响应的原因。有关更多信息,请参阅 提议的网络标准崩溃报告 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

·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
  • 使用 2 个新功能扩展了 navigationHistory API,以实现更好的历史记录管理。#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
  • 在实用程序进程中添加了错误事件,以支持关于 V8 致命错误的诊断报告。#43997
  • 添加了 View.setBorderRadius(radius),用于自定义视图的边框半径,并兼容 WebContentsView#42320
  • 使用 2 个新功能扩展了 navigationHistory API,以实现更好的历史记录管理。#42014

重大更改

已删除:macOS 10.15 支持

macOS 10.15 (Catalina) 不再受 Chromium 支持。

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

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

由于上游所做的更改,V8Node.js 现在都需要 C++20 作为最低版本。使用原生 node 模块的开发人员应使用 --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');

行为已更改:applogin 中的 webContents 属性

当为来自使用 respondToAuthRequestsFromMainProcess 选项创建的 实用程序进程 的请求触发事件时,来自 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 File System 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
  • 当尝试在阻止路径中打开文件或目录时,使 File System Access 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 使用,但在 Electron 31 中已移除。现在 Chromium 执行清理操作,会删除此目录。请参阅 issue #45396

结束对 29.x.y 的支持

根据项目的支持策略,Electron 29.x.y 已达到停止支持 (end-of-support) 状态。 建议开发者和应用程序升级到较新版本的 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
  • 实现了对 Web 标准 File System 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 已达到停止支持 (end-of-support) 状态。 建议开发者和应用程序升级到较新版本的 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 完整性熔断器 (#40504)
    • 如果配置不正确,启用 ASAR 完整性的现有应用程序可能无法在 Windows 上运行。使用 Electron 打包工具的应用程序应升级到 @electron/packager@18.3.1@electron/forge@7.4.0
    • 请查看我们的 ASAR 完整性教程 以获取更多信息。
  • 添加了 WebContentsViewBaseWindow 主进程模块,弃用并替换了 BrowserView (#35658)。在此博客文章中了解更多关于如何从 BrowserView 迁移到 WebContentsView 的信息。
    • BrowserView 现在是 WebContentsView 的垫片,旧的实现已被移除。
    • 有关新的 WebContentsView API 与其他类似 API 的比较,请参阅我们的 Web Embeds 文档
  • 实现了对 File System 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 进程发出的使用 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 的自动调整大小 API 的行为并不完全匹配。现在,自动调整大小的行为在所有平台上都已标准化。

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

已移除:WebContentscontext-menuparams.inputFormType 属性

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

已移除:process.getIOCounters()

Chromium 已移除对此信息的访问权限。

结束对 27.x.y 的支持

根据项目的支持策略,Electron 27.x.y 已达到停止支持 (end-of-support) 状态。 建议开发者和应用程序升级到较新版本的 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
  • net 模块添加到 utility 进程#40890
  • 添加了一个新的 Electron FusegrantFileProtocolExtraPrivileges,它使 file:// 协议选择更安全和更严格的行为,以匹配 Chromium。#40372
  • protocol.registerSchemesAsPrivileged 中添加了一个选项,以允许自定义方案中的 V8 代码缓存。#40544
  • 迁移了 app.{set|get}LoginItemSettings(settings) 以在 macOS 13.0+ 上使用 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 已达到停止支持 (end-of-support) 状态。 建议开发者和应用程序升级到较新版本的 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) 流程?如果您想向框架添加功能,RFC 可以成为与维护者就其设计展开对话的有用工具。您还可以在 Pull Requests 中查看正在讨论的即将到来的更改。要了解更多信息,请查看我们的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 使用 npm install electron@latest 安装它,或者从我们的发布网站下载它。继续阅读以了解有关此版本的详细信息。

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

值得注意的更改

亮点

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

堆栈更改

新功能

  • 启用了 ESM 支持。#37535
    • 有关更多详细信息,请参阅 ESM 文档
  • UtilityProcess API 添加了 ESM 入口点。#40047
  • display 对象添加了几个属性,包括 detectedmaximumCursorSizenativeOrigin#40554
  • 添加了对 Linux 上 ELECTRON_OZONE_PLATFORM_HINT 环境变量的支持。#39792

重大更改

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

设置为 false 的 WebContents.backgroundThrottling 将禁用 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 已达到停止支持 (end-of-support) 状态。 建议开发者和应用程序升级到较新版本的 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 使用 npm install electron@latest 安装它,或者从我们的发布网站下载它。继续阅读以了解有关此版本的详细信息。

如果您有任何反馈,请在 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 已达到停止支持 (end-of-support) 状态。 建议开发者和应用程序升级到较新版本的 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 已达到停止支持 (end-of-support) 状态。 这会将支持回退到最新的三个稳定主要版本,并将结束对 Windows 7/8/8.1 的官方支持。

下一步是什么

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

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大更改 页面。

Electron 26.0.0

·2 分钟阅读

Electron 26.0.0 已发布!它包括 Chromium 116.0.5845.62、V8 11.2 和 Node.js 18.16.1 的升级。阅读下文以了解更多详情!


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

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

值得注意的更改

堆栈更改

重大更改

已弃用:webContents.getPrinters

已弃用 webContents.getPrinters 方法。请改用 webContents.getPrintersAsync

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

// Deprecated
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 模块。

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

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

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

已弃用:systemPreferences.getColoralternate-selected-control-text

已弃用 systemPreferences.getColoralternate-selected-control-text 值。请改用 selected-content-background

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

新功能

  • 添加了 safeStorage.setUsePlainTextEncryptionsafeStorage.getSelectedStorageBackend api。#39107
  • 添加了 safeStorage.setUsePlainTextEncryptionsafeStorage.getSelectedStorageBackend api。#39155
  • 向通过 ipcRenderer.sendTo() 发送的消息添加了 senderIsMainFrame#39206
  • 添加了对将菜单标记为键盘启动的支持。#38954

结束对 23.x.y 的支持

根据项目的支持策略,Electron 23.x.y 已达到停止支持 (end-of-support) 状态。 建议开发者和应用程序升级到较新版本的 Electron。

E26 (23 年 8 月)E27 (23 年 10 月)E28 (24 年 1 月)
26.x.y27.x.y28.x.y
25.x.y26.x.y27.x.y
24.x.y25.x.y26.x.y
22.x.y

下一步是什么

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

您可以在此处找到 Electron 的公共时间表

有关未来更改的更多信息,请访问 计划的重大更改 页面。