跳到主要内容

44 篇标记为 "Release" 的文章

关于 Electron 新版本发布的博客文章

查看所有标签

Electron 7.0.0

·3 分钟阅读

Electron 7.0.0 已发布!它包括升级到 Chromium 78、V8 7.8 和 Node.js 12.8.1。我们新增了适用于 Arm 64 的 Windows 版本,提供了更快的 IPC 方法,新的 nativeTheme API 等等!


Electron 团队很高兴宣布发布 Electron 7.0.0!您可以使用 npm 通过 npm install electron@latest 安装,或从我们的 发布网站 下载。此版本包含大量升级、修复和新功能。我们迫不及待地想看看您会用它们构建什么!请继续阅读以了解此版本的详细信息,并请分享您的反馈!

重要更改

  • 堆栈升级

    堆栈Electron 6 中的版本Electron 7 中的版本新特性
    Chromium76.0.3809.14678.0.3905.177, 78
    V87.67.87.7, 7.8
    Node.js12.4.012.8.112.5, 12.6, 12.7, 12.8, 12.8.1
  • 新增适用于 Arm (64 位) 的 Windows 版本。#18591, #20112

  • 新增 ipcRenderer.invoke()ipcMain.handle() 用于异步请求/响应式 IPC。强烈建议使用它们替代 remote 模块。请参阅这篇 "Electron 的 'remote' 模块被认为有害" 博客文章了解更多信息。#18449

  • 新增 nativeTheme API 以读取和响应操作系统主题和配色方案的变化。#19758, #20486

  • 切换到新的 TypeScript Definitions 生成器。生成的定义更精确;因此如果您的 TypeScript 构建失败,这很可能是原因。#18103

请参阅 7.0.0 发行说明 获取更完整的更改列表。

破坏性更改

有关这些以及未来更改的更多信息,请参阅计划的破坏性更改页面。

  • 已移除的废弃 API
    • 现在使用 Promise 的函数的回调版本。#17907
    • Tray.setHighlightMode() (macOS)。#18981
    • app.enableMixedSandbox() #17894
    • app.getApplicationMenu(),
    • app.setApplicationMenu(),
    • powerMonitor.querySystemIdleState(),
    • powerMonitor.querySystemIdleTime(),
    • webFrame.setIsolatedWorldContentSecurityPolicy(),
    • webFrame.setIsolatedWorldHumanReadableName(),
    • webFrame.setIsolatedWorldSecurityOrigin() #18159
  • Session.clearAuthCache() 不再允许过滤已清除的缓存条目。#17970
  • macOS 上的原生界面(菜单、对话框等)现在会自动匹配用户机器上的暗模式设置。#19226
  • 更新了 electron 模块以使用 @electron/get。现在支持的最低 Node 版本是 Node 8。#18413
  • 文件 electron.asar 不再存在。依赖其存在的任何打包脚本都应更新。#18577

停止支持 4.x.y 版本

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

应用反馈计划

我们将继续使用我们的应用反馈计划进行测试。参与此计划的项目会在其应用上测试 Electron beta 版本;作为回报,他们发现的新 bug 将在稳定版本发布前得到优先处理。如果您想参与或了解更多信息,请查看我们关于该计划的博客文章

下一步

短期内,团队将继续专注于跟进 Electron 主要组成部分(包括 Chromium、Node 和 V8)的开发进展。虽然我们谨慎地不承诺具体的发布日期,但我们的计划是大约每季度发布一个包含这些组件新版本的 Electron 主要新版本。8.0.0 暂定时间表 列出了 Electron 8 开发生命周期中的关键日期。此外,请参阅我们的版本控制文档,了解有关 Electron 版本控制的更多详细信息。

有关 Electron 即将发布的版本中计划的破坏性更改的信息,请参阅我们的计划的破坏性更改文档

Electron 6.0.0

·4 分钟阅读

Electron 团队很高兴宣布发布 Electron 6.0.0!您可以使用 npm 通过 npm install electron@latest 安装,或从我们的 发布网站 下载。此版本包含大量升级、修复和新功能。我们迫不及待地想看看您会用它们构建什么!请继续阅读以了解此版本的详细信息,并请分享您的反馈!


新特性

今天标志着 Electron 项目的一个第一次:这是我们第一次在与相应的 Chrome 稳定版本 同一天 发布 Electron 稳定版本!🎉

Electron 的大部分功能由 Chromium、Node.js 和 V8 的核心组件提供。Electron 与这些项目保持同步,以便为用户提供新的 JavaScript 特性、性能改进和安全修复。在 Electron 6 中,这些软件包的每个主要版本都进行了升级。

此版本还包括对 Electron API 的改进。发行说明 中有更完整的列表,但以下是一些亮点:

Promise 化

Electron 6.0 继续推进 5.0 版本开始的现代化计划,以改进对 Promise 的支持。

这些函数现在返回 Promise,并仍然支持旧的回调式调用方式。

  • contentTracing.getCategories() #16583
  • contentTracing.getCategories() #16583
  • contentTracing.getTraceBufferUsage() #16600
  • contents.executeJavaScript() #17312
  • cookies.flushStore() #16464
  • cookies.get() #16464
  • cookies.remove() #16464
  • cookies.set() #16464
  • dialog.showCertificateTrustDialog() #17181
  • inAppPurchase.getProducts() #17355
  • inAppPurchase.purchaseProduct()#17355
  • netLog.stopLogging() #16862
  • session.clearAuthCache() #17259
  • session.clearCache() #17185
  • session.clearHostResolverCache() #17229
  • session.clearStorageData() #17249
  • session.getBlobData() #17303
  • session.getCacheSize() #17185
  • session.resolveProxy() #17222
  • session.setProxy() #17222
  • webContents.hasServiceWorker() #16535
  • webContents.printToPDF() #16795
  • webContents.savePage() #16742
  • webFrame.executeJavaScript() #17312
  • webFrame.executeJavaScriptInIsolatedWorld() #17312
  • webviewTag.executeJavaScript() #17312

这些函数现在有两种形式:同步和基于 Promise 的异步。

  • dialog.showMessageBox()/dialog.showMessageBoxSync() #17298
  • dialog.showOpenDialog()/dialog.showOpenDialogSync() #16973
  • dialog.showSaveDialog()/dialog.showSaveDialogSync() #17054

这些函数现在返回 Promise

Electron Helper (Renderer).app、Electron Helper (GPU).app 和 Electron Helper (Plugin).app

为了启用 hardened runtime,它限制了可写可执行内存和加载由不同团队 ID 签名的代码等功能,需要向 Helper 授予特殊的代码签名权利。

为了使这些权利仅限于需要它们的进程类型,Chromium 添加了 Helper 应用的三个新变体:一个用于渲染器 (Electron Helper (Renderer).app),一个用于 GPU 进程 (Electron Helper (GPU).app),以及一个用于插件 (Electron Helper (Plugin).app)。

使用 electron-osx-sign 对其 Electron 应用进行代码签名的开发者无需对其构建逻辑进行任何更改。如果您使用自定义脚本对应用进行代码签名,则应确保正确地对这三个新的 Helper 应用进行代码签名。

为了使用这些新的辅助程序正确地打包您的应用程序,您需要使用 electron-packager@14.0.4 或更高版本。如果您正在使用 electron-builder,您应该关注此问题以跟踪对这些新辅助程序的支援情况。

破坏性更改

  • 此版本开始为未来的要求奠定基础,即在渲染器进程中加载的原生 Node 模块必须是 N-API上下文感知 (Context Aware) 的。做出此更改的原因是为了提高性能、增强安全性和减少维护工作量。请在此问题中阅读包含提议时间表的完整详细信息。此更改预计将在 Electron v11 中完成。

  • net.IncomingMessage 的头部信息已略有更改,以更接近 Node.js 的行为,尤其是在处理 set-cookie 值和重复头部时。#17517

  • shell.showItemInFolder() 现在返回 void,并且是异步调用。#17121

  • 应用现在必须在使用 app.getPath('log') 之前调用新函数 app.setAppLogPath() 明确设置日志路径。#17841

停止支持 3.x.y 版本

根据我们的支持政策,3.x.y 版本已达到生命周期终点。鼓励开发者和应用升级到更新的 Electron 版本。

应用反馈计划

我们将继续使用我们的应用反馈计划进行测试。参与此计划的项目会在其应用上测试 Electron beta 版本;作为回报,他们发现的新 bug 将在稳定版本发布前得到优先处理。如果您想参与或了解更多信息,请查看我们关于该计划的博客文章

下一步

短期内,团队将继续专注于跟进 Electron 主要组成部分(包括 Chromium、Node 和 V8)的开发进展。虽然我们谨慎地不承诺具体的发布日期,但我们的计划是大约每季度发布一个包含这些组件新版本的 Electron 主要新版本。7.0.0 暂定时间表 列出了 Electron 7 开发生命周期中的关键日期。此外,请参阅我们的版本控制文档,了解有关 Electron 版本控制的更多详细信息。

有关 Electron 即将发布的版本中计划的破坏性更改的信息,请参阅我们的计划的破坏性更改文档

新的 Electron 发布节奏

·3 分钟阅读
⚡️ 更新 (2021-07-14):我们的速度甚至更快了!

在 2021 年第三季度,Chrome 团队将发布节奏加快,从每 6 周一次变为每 4 周一次。Electron 的发布也随之加快。请阅读更新的8 周发布节奏博客文章以获取更多最新信息!

🎉 Electron 将改为每 12 周发布一个主要的稳定新版本!🎉


⚡️ 哇,真快!但为什么呢?

简单来说,Chromium 的发布不会停止,所以 Electron 也不会放慢速度。

Chromium 每 6 周按固定计划发布一次。为了在 Electron 中提供最新的 Chromium 版本,我们的发布计划需要与他们同步。有关 Chromium 发布周期的更多信息,可以在这里找到。

🚀 为什么是每 12 周?

每隔 6 周,一个新的 Chromium 版本就会发布,带来新特性、错误/安全修复和 V8 改进。Electron 的用户明确地表达了希望及时获得这些更改的愿望,因此我们调整了稳定版本发布日期,以与每隔一次的 Chromium 稳定版本发布日期匹配。首先,Electron v6.0.0 将包含 M76,并计划于 2019 年 7 月 30 日 发布稳定版本,与 Chromium M76 的发布日期相同。

🚧 这对我以及我的 Electron 应用意味着什么?

您将比以前更快地获得新的 Chromium 和 V8 特性和修复。更重要的是,您也会知道这些新更改将 何时 到来,这样您就可以利用更好的信息进行规划。

Electron 团队将继续支持最新的三个主要版本。例如,当 v6.0.0 于 2019 年 7 月 30 日 发布稳定版本时,我们将支持 v6.x、v5.x 和 v4.x,而 v3.x 将达到生命周期终点。

💬 应用反馈计划

请考虑加入我们的应用反馈计划,帮助我们测试 beta 版本并稳定版本。参与此计划的项目会在其应用上测试 Electron beta 版本;作为回报,他们发现的新 bug 将在稳定版本发布前得到优先处理。

📝 Electron 发布简史

v3.0.0 之前的稳定版本发布决定没有遵循固定计划。我们从 v3.0.0 和 v4.0.0 版本开始为项目添加了内部计划。今年早些时候,我们首次决定公开 Electron v5.0.0 的稳定版本发布日期。公布我们的稳定版本发布日期总体上受到了积极响应,我们也很高兴在未来的版本中继续这样做。

为了更好地简化这些与升级相关的工作,我们在 治理 系统内创建了 升级发布 工作组。这使我们能够更好地优先处理和分配这项工作,我们希望在随后的每个版本中都能看到更显著的效果。

这是我们的新节奏与 Chromium 节奏的对比位置:

line graph comparing Electron versus Chromium versions

📨 如果您有任何问题,请发送电子邮件至 info@electronjs.org 联系我们。

Electron 5.0.0

·4 分钟阅读

Electron 团队很高兴宣布发布 Electron 5.0.0!您可以使用 npm 通过 npm install electron@latest 安装,或从我们的发布页面下载 tarball。此版本包含大量升级、修复和新功能。我们迫不及待地想看看您会用它们构建什么!请继续阅读以了解此版本的详细信息,并请分享您的反馈!


新特性?

Electron 的大部分功能由 Chromium、Node.js 和 V8 的核心组件提供。Electron 与这些项目保持同步,以便为用户提供新的 JavaScript 特性、性能改进和安全修复。在 Electron 5 中,这些软件包的每个主要版本都进行了升级。

Electron 5 还包括对 Electron 特有 API 的改进。主要更改的摘要如下;要查看完整的更改列表,请查看 Electron v5.0.0 发行说明

Promise 化

Electron 5 继续推进Promise 化计划,以将 Electron 基于回调的 API 转换为使用 Promise。这些 API 在 Electron 5 中已转换。

  • app.getFileIcon
  • contentTracing.getCategories
  • contentTracing.startRecording
  • contentTracing.stopRecording
  • debugger.sendCommand
  • Cookies API
  • shell.openExternal
  • webContents.loadFile
  • webContents.loadURL
  • webContents.zoomLevel
  • webContents.zoomFactor
  • win.capturePage

macOS 系统颜色访问

已更改或新增这些函数到 systemPreferences 以访问 macOS 系统颜色。

  • systemPreferences.getAccentColor
  • systemPreferences.getColor
  • systemPreferences.getSystemColor

进程内存信息

已新增函数 process.getProcessMemoryInfo 以获取当前进程的内存使用统计信息。

远程 API 的附加过滤

为了提高 remote API 的安全性,已新增远程事件,以便可以过滤 remote.getBuiltinremote.getCurrentWindowremote.getCurrentWebContents<webview>.getWebContents

BrowserWindow 上的多个 BrowserView

BrowserWindow 现在支持在同一个 BrowserWindow 中管理多个 BrowserView。

破坏性更改

打包应用的默认设置

打包应用的行为现在将与默认应用相同:除非应用已有,否则将创建一个默认的应用菜单;并且除非应用自行处理 window-all-closed 事件,否则该事件将自动处理。

混合沙箱

混合沙箱模式现在默认启用。使用 sandbox: true 启动的渲染器现在将实际处于沙箱中,而之前只有在混合沙箱模式也启用时才会处于沙箱中。

安全改进

为了提高安全性,nodeIntegrationwebviewTag 的默认值现在是 false

拼写检查器现在是异步的

SpellCheck API 已更改为提供异步结果

废弃项

以下 API 在 Electron 5.0.0 中新增废弃,并计划在 6.0.0 中移除:

用于 arm 和 arm64 的 Mksnapshot 二进制文件

用于 arm 和 arm64 的 mksnapshot 原生二进制文件已废弃,并将在 6.0.0 中移除。可以使用 x64 二进制文件为 arm 和 arm64 创建快照。

WebContents 上的 ServiceWorker API

为移除做准备,废弃了 WebContents 上的 ServiceWorker API。

  • webContents.hasServiceWorker
  • webContents.unregisterServiceWorker

带沙箱 webContents 的自动模块

为了提高安全性,以下模块通过 require 直接使用的方式已废弃,并且需要在沙箱化的 webcontents 中通过 remote.require 包含。

  • electron.screen
  • child_process
  • fs
  • os
  • path

webFrame Isolated World API

webFrame.setIsolatedWorldContentSecurityPolicywebFrame.setIsolatedWorldHumanReadableNamewebFrame.setIsolatedWorldSecurityOrigin 已被废弃,请改用 webFrame.setIsolatedWorldInfo

混合沙箱

enableMixedSandbox--enable-mixed-sandbox 命令行开关仍为兼容性保留,但已被废弃且无效。

停止支持 2.0.x

根据我们的支持版本策略,2.0.x 已达到生命周期结束。

应用反馈计划

我们将继续使用我们的应用反馈计划进行测试。参与此计划的项目会在其应用上测试 Electron beta 版本;作为回报,他们发现的新 bug 将在稳定版本发布前得到优先处理。如果您想参与或了解更多信息,请查看我们关于该计划的博客文章

下一步

短期内,您可以期待团队继续专注于跟进构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。虽然我们谨慎承诺发布日期,但我们的计划是大约每季度发布一个包含这些组件新版本的 Electron 主要版本。Electron 6.0.0 的暂定时间表 列出了 Electron 6 开发生命周期中的关键日期。此外,请参阅我们的版本控制文档,了解有关 Electron 版本控制的更详细信息。

有关 Electron 即将发布的版本中计划的破坏性更改的信息,请参阅我们的计划的破坏性更改文档

Node.js 原生插件和 Electron 5.0

·阅读时长 2 分钟

如果您在使用原生 Node.js 插件与 Electron 5.0 时遇到问题,则可能需要更新该插件才能与最新版本的 V8 兼容。


再见 v8::Handle,你好 v8::Local

在 2014 年,V8 团队废弃了 v8::Handle,转而支持用于局部句柄的 v8::Local。Electron 5.0 包含一个最终彻底移除了 v8::Handle 的 V8 版本,仍然使用它的原生 Node.js 插件在使用 Electron 5.0 之前需要进行更新。

所需的代码更改非常小,但每个仍然使用 v8::Handle 的原生 Node 模块都将无法使用 Electron 5.0 进行构建,并且需要修改。好消息是 Node.js v12 也将包含此 V8 更改,因此任何使用 v8::Handle 的模块都无论如何都需要更新才能与即将发布的 Node 版本兼容。

我维护一个原生插件,我能提供什么帮助?

如果您维护一个 Node.js 原生插件,请确保将所有出现的 v8::Handle 替换为 v8::Local。前者只是后者的别名,因此无需进行其他更改来解决此特定问题。

您可能也有兴趣了解 N-API,它作为 Node.js 本身的一部分独立于 V8 进行维护,旨在隔离原生插件不受底层 JavaScript 引擎变化的影响。您可以在 Node.js 网站上的 N-API 文档中找到更多信息。

救命!我的应用使用了原生插件,但它无法工作!

如果您在应用中使用了 Node.js 原生插件,并且由于此问题导致原生插件无法构建,请联系插件作者查看他们是否发布了修复此问题的新版本。如果没有,与作者联系(或提交拉取请求!)可能是您最好的选择。

Electron v5.0.0 时间表

·阅读时长 2 分钟

Electron 首次公开宣布其发布计划,从 v5.0.0 开始。这是我们建立公共、长期时间表的第一步。


正如我们在 v4.0.0 稳定版博客文章中提到的,我们计划大约每季度发布一次,以与 Chromium 的发布节奏保持更近的同步。Chromium 发布新版本的速度非常快——每 6 周发布一次。

来看看 Electron 与 Chromium 的并行进展

line graph comparing Electron versus Chromium versions

在 2018 年下半年,我们的首要任务是加快发布速度,并更接近 Chromium。通过坚持预定时间表,我们取得了成功。Electron 3.0.0 和 4.0.0 在 2-3 个月的时间内各自发布。我们对在发布 5.0.0 及更高版本时保持这种速度感到乐观。随着大约每季度发布一个 Electron 主要版本,我们现在正跟上 Chromium 的发布节奏。超越 Chromium 稳定版始终是我们的目标,我们正在朝着这个目标努力。

我们很想像 Node.jsChromium 那样承诺未来的日期,但我们尚未达到那个阶段。我们乐观地认为将来会制定长期时间表。

考虑到这一点,我们正在迈出第一步,公开公布 v5.0.0 的发布计划。您可以在此处找到该计划。

为了帮助我们测试测试版和稳定版本,请考虑加入我们的应用反馈计划

Electron 4.0.0

·阅读时长 6 分钟

Electron 团队很高兴宣布 Electron 4 稳定版现已发布!您可以从 electronjs.org 或通过 npm 安装,命令为 npm install electron@latest。此版本包含升级、修复和新功能,我们迫不及待地想看到您用它们构建什么。继续阅读以了解此版本的详细信息,并在探索过程中分享您的任何反馈!


新特性?

Electron 的大部分功能由 Chromium、Node.js 和 V8 提供,这些是构成 Electron 的核心组件。因此,Electron 团队的一个关键目标是尽可能跟上这些项目的变化,为构建 Electron 应用的开发者提供访问新的 Web 和 JavaScript 功能的权限。为此,Electron 4 的这些组件都有了主要版本提升;Electron v4.0.0 包括 Chromium 69.0.3497.106、Node 10.11.0 和 V8 6.9.427.24

此外,Electron 4 包括针对 Electron 特定 API 的更改。您可以在下面找到 Electron 4 主要更改的摘要;有关更改的完整列表,请查看 Electron v4.0.0 发行说明

禁用 remote 模块

出于安全原因,您现在可以禁用 remote 模块。可以在 BrowserWindowwebview 标签中禁用此模块。

// BrowserWindow
new BrowserWindow({
webPreferences: {
enableRemoteModule: false
}
})

// webview tag
<webview src="http://www.google.com/" enableremotemodule="false"></webview>

有关更多信息,请参阅 BrowserWindow<webview> 标签 文档。

过滤 remote.require() / remote.getGlobal() 请求

如果您不想在渲染进程或 webview 中完全禁用 remote 模块,但希望对哪些模块可以通过 remote.require 进行要求有额外的控制,此功能非常有用。

当在渲染进程中通过 remote.require 要求模块时,app 模块上会触发 remote-require 事件。您可以在事件(第一个参数)上调用 event.preventDefault() 来阻止模块加载。发生要求的 WebContents 实例作为第二个参数传递,模块名称作为第三个参数传递。同样的事件也会在 WebContents 实例上触发,但在这种情况下,只有事件和模块名称作为参数。在这两种情况下,您都可以通过设置 event.returnValue 的值来返回自定义值。

// Control `remote.require` from all WebContents:
app.on('remote-require', function (event, webContents, requestedModuleName) {
// ...
});

// Control `remote.require` from a specific WebContents instance:
browserWin.webContents.on(
'remote-require',
function (event, requestedModuleName) {
// ...
},
);

类似地,当调用 remote.getGlobal(name) 时,会触发 remote-get-global 事件。这与 remote-require 事件的工作方式相同:调用 preventDefault() 以阻止返回全局变量,并设置 event.returnValue 以返回自定义值。

// Control `remote.getGlobal` from all WebContents:
app.on(
'remote-get-global',
function (event, webContents, requrestedGlobalName) {
// ...
},
);

// Control `remote.getGlobal` from a specific WebContents instance:
browserWin.webContents.on(
'remote-get-global',
function (event, requestedGlobalName) {
// ...
},
);

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

从 JavaScript 访问“关于”面板

在 macOS 上,您现在可以调用 app.showAboutPanel() 来以编程方式显示“关于”面板,就像单击通过 {role: 'about'} 创建的菜单项一样。有关更多信息,请参阅 showAboutPanel 文档

控制 WebContents 后台节流

WebContents 实例现在有一个方法 setBackgroundThrottling(allowed),用于在页面处于后台时启用或禁用计时器和动画的节流。

let win = new BrowserWindow(...)
win.webContents.setBackgroundThrottling(enableBackgroundThrottling)

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

破坏性更改

不再支持 macOS 10.9

Chromium 不再支持 macOS 10.9 (OS X Mavericks),因此 Electron 4.0 及更高版本也不再支持它

单实例锁定

之前,为了使您的应用成为单实例应用(确保您的应用在任何给定时间只有一个实例正在运行),您可以使用 app.makeSingleInstance() 方法。从 Electron 4.0 开始,您必须改用 app.requestSingleInstanceLock()。此方法的返回值表示您的应用此实例是否成功获得了锁定。如果未能获得锁定,您可以假定您的应用另一个实例已经拥有锁定并立即退出。

有关使用 requestSingleInstanceLock() 的示例以及有关各种平台上的细微行为的信息,请参阅 app.requestSingleInstanceLock() 和相关方法 以及 second-instance 事件 的文档。

win_delay_load_hook

为 Windows 构建原生模块时,模块 binding.gyp 中的 win_delay_load_hook 变量必须为 true(这是默认值)。如果不存在此 hook,则原生模块将无法在 Windows 上加载,并显示类似 Cannot find module 的错误消息。请参阅原生模块指南了解更多信息。

废弃项

以下计划在 Electron 5.0 中进行突破性更改,因此在 Electron 4.0 中已被弃用。

nativeWindowOpen 打开的窗口禁用 Node.js 集成

从 Electron 5.0 开始,使用 nativeWindowOpen 选项打开的子窗口将始终禁用 Node.js 集成。

webPreferences 默认值

使用 webPreferences 选项创建新的 BrowserWindow 时,以下 webPreferences 选项默认值已弃用,转而采用下面列出的新默认值

属性已弃用默认值新默认值
contextIsolationfalsetrue
nodeIntegrationtruefalse
webviewTag如果设置了 nodeIntegration 的值,否则为 truefalse

请注意:目前存在一个已知错误 (#9736),当 contextIsolation 开启时,该错误会阻止 webview 标签工作。请关注 GitHub issue 以获取最新信息!

Electron 安全文档中了解有关上下文隔离、Node 集成和 webview 标签的更多信息。

Electron 4.0 仍将使用当前默认值,但如果您未为其传递显式值,您将看到弃用警告。为了让您的应用为 Electron 5.0 做好准备,请为这些选项使用显式值。请参阅 BrowserWindow 文档了解每个选项的详细信息。

webContents.findInPage(text[, options])

medialCapitalAsWordStartwordStart 选项由于已在上游移除而被弃用。

应用反馈计划

我们在 Electron 3.0 开发期间建立的应用反馈计划取得了成功,因此我们在 4.0 开发期间也继续实施了该计划。我们要向 Atlassian、Discord、MS Teams、OpenFin、Slack、Symphony、WhatsApp 和其他计划成员在 4.0 beta 周期中的参与表示衷心感谢。要了解有关应用反馈计划的更多信息并参与未来的 beta 版本,请查看我们关于该计划的博客文章

下一步

短期内,您可以期待团队继续专注于跟进构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。虽然我们谨慎承诺发布日期,但我们的计划是大约每季度发布一个包含这些组件新版本的 Electron 主要版本。参阅我们的版本控制文档了解有关 Electron 版本控制的更详细信息。

有关 Electron 即将发布的版本中计划的破坏性更改的信息,请参阅我们的计划的破坏性更改文档

Electron 3.0.0

·4 分钟阅读

Electron 团队很高兴地宣布,Electron 3 的第一个稳定版本现已在 electronjs.org 上发布,也可以通过 npm install electron@latest 进行安装!它包含了大量的升级、修复和新功能,我们迫不及待地想看到您用它们构建出什么。以下是此版本的详细信息,我们欢迎您在探索过程中提供反馈。


发布流程

在开发 v3.0.0 期间,我们通过正式化渐进式测试版发布的反馈流程,寻求更经验性地定义稳定版发布的标准。如果没有我们的应用反馈计划合作伙伴,v3.0.0 将是不可能实现的,他们在测试版周期中提供了早期的测试和反馈。感谢 Atlassian、Atom、Microsoft Teams、Oculus、OpenFin、Slack、Symphony、VS Code 以及其他计划成员的工作。如果您想参与未来的测试版,请发送邮件至 info@electronjs.org

更改 / 新功能

Electron 工具链中的几个重要部分进行了主要版本提升,包括 Chrome v66.0.3359.181、Node v10.2.0 和 V8 v6.6.346.23

  • [#12656] feat: app.isPackaged
  • [#12652] feat: app.whenReady()
  • [#13183] feat: process.getHeapStatistics()
  • [#12485] feat: win.moveTop() 将窗口 Z 轴顺序移到顶部
  • [#13110] feat: TextField 和 Button API
  • [#13068] feat: netLog API 用于动态日志控制
  • [#13539] feat: 在沙箱渲染器中启用 webview
  • [#14118] feat: fs.readSync 现在支持大文件
  • [#14031] feat: Node fs 包装器,使得 fs.realpathSync.nativefs.realpath.native 可用

突破性 API 更改

  • [#12362] feat: 菜单项顺序控制的更新
  • [#13050] refactor: 移除了文档中已弃用的 API
    • 有关更多详细信息,请参阅文档
  • [#12477] refactor: 移除了 did-get-response-detailsdid-get-redirect-request 事件
  • [#12655] feat: 默认为禁用拖放导航
  • [#12993] feat: 使用 electron npm 模块需要 Node v4.x 或更高版本
  • [#12008 #12140 #12503 #12514 #12584 #12596 #12637 #12660 #12696 #12716 #12750 #12787 #12858] refactor: NativeWindow
  • [#11968] refactor: menu.popup()
  • [#8953] feat: 不再使用 JSON 发送 ipcRenderer.sendSync 的结果
  • [#13039] feat: 默认为忽略 URL 后面的命令行参数
  • [#12004] refactor: 重命名 api::Windowapi::BrowserWindow
  • [#12679] feat: 视觉缩放默认关闭
  • [#12408] refactor: 重命名 app-command media-play_pausemedia-play-pause

macOS

  • [#12093] feat: 工作空间通知支持
  • [#12496] feat: tray.setIgnoreDoubleClickEvents(ignore) 用于忽略托盘双击事件。
  • [#12281] feat: macOS 鼠标转发功能
  • [#12714] feat: 屏幕锁定/解锁事件

Windows

  • [#12879] feat: 添加了 DIP 到/从屏幕坐标转换

重要提示:在运行此版本后切换回旧版 Electron,需要清除您的用户数据目录,以避免旧版本崩溃。您可以通过运行 console.log(app.getPath("userData")) 获取用户数据目录,或参阅文档了解更多详细信息。

错误修复

  • [#13397] fix: fs.statSyncNoException 抛出异常的问题
  • [#13476, #13452] fix: 加载包含 jquery 的站点时崩溃
  • [#14092] fix: net::ClientSocketHandle 析构函数中的崩溃
  • [#14453] fix: 立即通知焦点变化,而不是在下一个 tick

MacOS

  • [#13220] fix: 在 <input file="type"> 打开文件对话框中允许选择 bundle 的问题
  • [#12404] fix: 使用异步对话框时阻塞主进程的问题
  • [#12043] fix: 上下文菜单点击回调
  • [#12527] fix: touchbar 项重复使用时事件泄漏
  • [#12352] fix: 托盘标题崩溃
  • [#12327] fix: 不可拖动区域
  • [#12809] fix: 防止菜单在打开时更新
  • [#13162] fix: 托盘图标边界不允许负值
  • [#13085] fix: 托盘标题在高亮时不反转
  • [#12196] fix: 当 enable_run_as_node==false 时 Mac 构建
  • [#12157] fix: 无框窗口与活力效果的其他问题
  • [#13326] fix: 调用 app.removeAsDefaultProtocolClient 后将 mac 协议设置为 none
  • [#13530] fix: MAS 构建中不正确使用私有 API
  • [#13517] fix: tray.setContextMenu 崩溃
  • [#14205] fix: 即使设置了 defaultId,在对话框上按 Escape 键现在也可以关闭对话框

Linux

  • [#12507] fix: 离屏窗口的 BrowserWindow.focus()

其他说明

  • PDF 查看器目前无法工作,但正在修复中,很快将再次可用
  • TextFieldButton API 是实验性的,因此默认关闭
    • 可以使用 enable_view_api 构建标志启用它们

下一步

Electron 团队将继续致力于定义更快速、更流畅的升级流程,以期最终与 Chromium、Node 和 V8 的开发节奏保持同步。

Electron 2.0.0

·阅读时长 5 分钟

经过四个多月的开发、八个测试版发布以及来自众多应用的阶段性推广测试,Electron 2.0.0 版本现已在 electronjs.org 发布。


发布流程

从 2.0.0 开始,Electron 的发布将遵循语义化版本控制。这意味着主版本将更频繁地升级,通常是 Chromium 的主要更新。补丁版本应该更稳定,因为它们只包含高优先级的错误修复。

Electron 2.0.0 还代表了 Electron 在主要版本发布前的稳定过程有所改进。几个大型 Electron 应用已在阶段性推广中包含了 2.0.0 测试版,为 Electron 的测试版系列提供了有史以来最好的反馈循环。

更改 / 新功能

  • Electron 工具链中的几个重要部分进行了主要版本提升,包括 Chrome 61、Node 8.9.3、V8 6.1.534.41、Linux 上的 GTK+ 3、更新的拼写检查器和 Squirrel。
  • macOS 现已支持应用内购买#11292
  • 用于加载文件的新 API。#11565
  • 启用/禁用窗口的新 API。#11832
  • 新 API app.setLocale()。#11469
  • 新增对 IPC 消息日志记录的支持。#11880
  • 新菜单事件。#11754
  • 为 powerMonitor 添加 shutdown 事件。#11417
  • 添加 affinity 选项,用于将多个 BrowserWindow 聚集到单个进程中。#11501
  • 添加 saveDialog 列出可用扩展名的功能。#11873
  • 支持额外的通知操作。#11647
  • 设置 macOS 通知关闭按钮标题的功能。#11654
  • 为 menu.popup(window, callback) 添加条件
  • touchbar 项的内存改进。#12527
  • 改进的安全建议清单。
  • 添加应用范围的安全沙箱书签。#11711
  • 在渲染器进程中设置任意参数的功能。#11850
  • 为格式选择器添加附件视图。#11873
  • 修复网络代理竞态条件。#12053
  • 取消对 Linux 上 mips64el 架构的支持。Electron 需要 C++14 工具链,在发布时该架构尚不可用。我们希望将来能重新添加支持。

突破性 API 更改

  • 移除了已弃用的 API,包括
    • 更改了 menu.popup 签名。#11968
    • 移除了已弃用的 crashReporter.setExtraParameter#11972
    • 移除了已弃用的 webContents.setZoomLevelLimitswebFrame.setZoomLevelLimits#11974
    • 移除了已弃用的 clipboard 方法。#11973
    • 移除了对 tray.setHighlightMode 布尔参数的支持。#11981

错误修复

  • 更改为确保 webContents.isOffscreen() 始终可用。#12531
  • 修复了 DevTools 未停靠且聚焦时 BrowserWindow.getFocusedWindow() 的问题。#12554
  • 修复了如果 preload 路径包含特殊字符,预加载在沙箱渲染器中无法加载的问题。#12643
  • 根据文档更正了 allowRunningInsecureContent 的默认值。#12629
  • 修复了 nativeImage 的透明度问题。 #12683
  • 修复了 `Menu.buildFromTemplate` 的问题。 #12703
  • 确认 menu.popup 选项是对象。 #12330
  • 消除了新进程创建和上下文释放之间的竞态条件。 #12361
  • 切换 BrowserView 时更新可拖动区域。 #12370
  • 修复了在聚焦时检测菜单栏切换 Alt 键的问题。 #12235
  • 修复了 webviews 中不正确的警告。 #12236
  • 修复了从父窗口继承 'show' 选项的问题。 #122444
  • 确保 `getLastCrashReport()` 确实是最后一次崩溃报告。 #12255
  • 修复了网络共享路径上的 require 问题。 #12287
  • 修复了上下文菜单点击回调。 #12170
  • 修复了弹出菜单位置。 #12181
  • 改进了 libuv 循环清理。 #11465
  • 修复了 `hexColorDWORDToRGBA` 处理透明颜色时的问题。 #11557
  • 修复了使用 getWebPreferences API 时的空指针解引用问题。 #12245
  • 修复了菜单代理中的循环引用问题。 #11967
  • 修复了 net.request 的协议过滤问题。 #11657
  • WebFrame.setVisualZoomLevelLimits 现在设置用户代理缩放限制 #12510
  • 为 webview 选项设置适当的默认值。 #12292
  • 改进了毛玻璃效果支持。 #12157 #12171 #11886
  • 修复了单例夹具中的时序问题。
  • 修复了 NotifierSupportsActions() 中损坏的生产缓存。
  • 使 MenuItem 角色兼容 camelCase 命名法。 #11532
  • 改进了触控栏更新。 #11812, #11761
  • 移除了额外的菜单分隔符。 #11827
  • 修复了蓝牙选择器错误。关闭 #11399
  • 修复了 macOS 全屏切换菜单项的标签。 #11633
  • 改进了窗口失去焦点时工具提示的隐藏功能。 #11644
  • 迁移了已废弃的 web-view 方法。 #11798
  • 修复了关闭从 browserview 打开的窗口的问题。 #11799
  • 修复了蓝牙选择器错误。 #11492
  • 更新为使用任务调度器处理 app.getFileIcon API。 #11595
  • 更改为即使在离屏渲染时也触发 `console-message` 事件。 #11921
  • 修复了使用 `WebContents.downloadURL` 从自定义协议下载的问题。 #11804
  • 修复了 devtools 分离时透明窗口失去透明度的问题。 #11956
  • 修复了 Electron 应用程序取消重启或关机的问题。 #11625

macOS

  • 修复了重复使用触控栏项目时事件泄漏的问题。 #12624
  • 修复了深色模式下托盘图标的高亮问题。 #12398
  • 修复了异步对话框阻塞主进程的问题。 #12407
  • 修复了使用 `setTitle` 导致托盘崩溃的问题。 #12356
  • 修复了设置 dock 菜单时崩溃的问题。 #12087

Linux

  • 改进了 Linux 桌面通知。 #12229 #12216 #11965 #11980
  • 改进了菜单的 GTK+ 主题支持。 #12331
  • 在 Linux 上优雅退出。 #12139
  • 使用应用程序名称作为托盘图标的默认工具提示。 #12393

Windows

  • 增加了 Visual Studio 2017 支持。 #11656
  • 修复了将异常传递给系统崩溃处理程序的问题。 #12259
  • 修复了最小化窗口隐藏工具提示的问题。 #11644
  • 修复了 `desktopCapturer` 捕获屏幕不正确的问题。 #11664
  • 修复了 `disableHardwareAcceleration` 和透明度的问题。 #11704

下一步

Electron 团队正努力支持更新的 Chromium、Node 和 v8 版本。敬请期待即将发布的 3.0.0-beta.1!

Electron 2.0 及更高版本 - 语义化版本控制

·阅读时长 1 分钟

新版 Electron 正在开发中,随之而来的是版本控制策略的一些变化。从 2.0.0 版本开始,Electron 将严格遵循语义化版本规范 (Semantic Versioning)。


这一变化意味着您将更频繁地看到主版本号增加,这通常是 Chromium 的重大更新。补丁版本也将更加稳定,因为它们现在只包含错误修复,不包含新功能。

主版本号增加

  • Chromium 版本更新
  • Node.js 主版本更新
  • Electron API 的破坏性变更

次版本号增加

  • Node.js 次版本更新
  • Electron API 的非破坏性变更

补丁版本号增加

  • Node.js 补丁版本更新
  • 与修复相关的 Chromium 补丁
  • Electron 错误修复

由于 Electron 的语义化版本范围现在更具意义,我们建议使用 npm 的默认 `--save-dev` 标志安装 Electron,这将在您的版本前加上 `^`,确保您能安全地获取次要版本和补丁更新。

npm install --save-dev electron

对于只关心错误修复的开发者,您应该使用波浪号 (`~`) 前缀的语义化版本,例如 `~2.0.0`,这将不会引入新功能,只会包含提高稳定性的修复。

更多详情请参阅 electronjs.org/docs/tutorial/electron-versioning