跳转到主要内容

47 条带有“Release”标签的帖子

关于 Electron 新发布的博客文章

查看所有标签

Electron 10.0.0

·阅读时长 5 分钟

Electron 10.0.0 已经发布!它包含了对 Chromium 85、V8 8.5 和 Node.js 12.16 的升级。我们还添加了几个新的 API 集成和改进。请阅读下文了解更多详情!


Electron 团队很高兴地宣布 Electron 10.0.0 发布!您可以通过 npm install electron@latest 使用 npm 安装它,或者从我们的 发布网站 下载。本次发布包含了大量的升级、修复和新功能。

在 Electron 10 的发布中,我们还对发布说明进行了更改。为了更容易区分 Electron 10 中哪些是全新的,哪些是 Electron 10 和之前版本之间的变化,我们现在还会包含那些已经引入到 Electron 10 中,但又被反向移植到之前版本中的更改。我们希望这能帮助应用程序在升级 Electron 时更容易找到新功能和 bug 修复。

我们迫不及待地想看到您用它们构建出什么!请继续阅读有关此版本的详细信息,并请分享您的任何反馈!

重要变更

技术栈变更

重点特性

  • 添加了 contents.getBackgroundThrottling() 方法和 contents.backgroundThrottling 属性。[#21036]
  • 在主进程中暴露了 desktopCapturer 模块。#23548
  • 现在可以通过调用 ses.isPersistent() API 来检查给定的 session 是否是持久化的。#22622
  • 解决了由于网络 IP 地址更改和 ICE 导致 RTC 调用无法连接的网络问题。(Chromium 问题 1113227)。#24998

请参阅 10.0.0 版本发布说明,了解新功能和更改的完整列表。

破坏性变更

  • enableRemoteModule 的默认值更改为 false#22091
    • 这是我们计划中将 remote 模块弃用并将其迁移到用户空间的计划的一部分。您可以阅读并关注 这个 issue,其中详细说明了我们这样做的原因,并包含了弃用的时间线建议。
  • app.allowRendererProcessReuse 的默认值更改为 true#22336 (也包含在 Electron 9 中)
    • 这将阻止在渲染器进程中加载非上下文感知的原生模块。
    • 您可以阅读并关注此问题,其中详细说明了我们这样做的原因,并包含了弃用的建议时间表。
  • 修复了 macOS 上当操作系统区域设置为 RTL 语言(如阿拉伯语或希伯来语)时窗口按钮的定位问题。无边框窗口应用程序在 styling 窗口时可能需要考虑此更改。 #22016

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

API 更改

  • Session:现在可以通过调用 ses.isPersistent() API 来检查给定的 session 是否是持久化的。#22622
  • Contents:添加了 contents.getBackgroundThrottling() 方法和 contents.backgroundThrottling 属性。#21036

已弃用的 API

以下 API 现已弃用或被移除

  • 移除了 netLog 中已弃用的 currentlyLoggingPath 属性。此外,netLog.stopLogging 不再返回记录日志的路径。 #22732
  • crashReporter 中弃用了未压缩的崩溃报告上传。#23598

停止对 7.x.y 的支持

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

下一步计划

短期内,您可以期望团队继续专注于跟进构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。虽然我们小心翼翼地不承诺发布日期,但我们的计划是大约每季度发布一个包含这些组件新版本的新主要版本 Electron。 暂定的 11.0.0 时间表 概述了 Electron 11.0 开发生命周期中的关键日期。另外,请参阅我们的 版本文档 以获取关于 Electron 版本管理的更详细信息。

有关 Electron 未来版本中计划的重大更改的信息,请参阅我们的计划中的重大更改文档

继续进行 remote 模块的弃用工作(在 Electron 11 中)

我们在 Electron 9 中开始了移除 remote 模块的工作,并且我们正在继续计划移除 remote 模块。在 Electron 11 中,我们计划继续进行重构工作,以实现 WeakRef,正如我们在 Electron 10 中所做的那样。请阅读并关注 这个 issue 以获取完整的计划和弃用详情。

要求原生 Node 模块是上下文感知或 N-API 的最后一步 (在 Electron 12 中)

编辑:最初,这篇博客文章声明我们将在 Electron 11 中禁用渲染器进程重用。禁用渲染器进程重用现已推迟到 Electron 12。

从 Electron 6 开始,我们一直在为要求在渲染进程中加载的 原生 Node 模块 必须是 N-APIContext Aware 打下基础。强制执行此更改可以提高安全性,加快性能,并减少维护工作量。此计划的最后一步是在 Electron 12 中移除禁用渲染进程复用的能力。请阅读 这个 issue 以获取包括建议时间线在内的完整详细信息。

Electron 9.0.0

·阅读时长 5 分钟

Electron 9.0.0 已发布! 它包含了对 Chromium 83、V8 8.3 和 Node.js 12.14 的升级。 我们为拼写检查功能添加了几个新的 API 集成,启用了 PDF 查看器,以及更多!


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

重要变更

技术栈变更

重点特性

  • 拼写检查功能的多项改进。详情请参阅#22128#22368
  • 改进了 Linux 上窗口事件处理程序的效率。 #23260
  • 启用 PDF 查看器。 #22131

有关新功能和变化的完整列表,请参见 9.0.0 发行说明

破坏性变更

  • 在 `enableRemoteModule: true` 未设置的情况下使用 `remote` 会出现弃用警告。 #21546
    • 这是我们计划弃用 remote 模块并将其移至用户领域的首要步骤。您可以阅读并关注此议题,其中详细说明了我们这样做的原因,并包含了弃用的拟议时间表。
  • 默认设置 `app.enableRendererProcessReuse` 为 true。 #22336
    • 这是未来要求在渲染器进程中加载的 Node 原生模块必须是 N-API上下文感知的持续工作。完整信息和拟议时间表详见此议题
  • 通过 IPC 发送非 JavaScript 对象现在会抛出异常。 #21560
    • 此行为在 Electron 8.0 中已被弃用。 在 Electron 9.0 中,旧的序列化算法已被移除,发送这类不可序列化的对象现在将抛出“object could not be cloned”错误。

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

API 更改

  • shell API 变更
    • shell.openItem API 已被异步的 shell.openPath API 取代。提案
  • session API 变更
    • 添加了 `session.listWordsFromSpellCheckerDictionary` API 以列出词典中的自定义单词。 #22128
    • 添加了 `session.removeWordFromSpellCheckerDictionary` API 以从词典中删除自定义单词。 #22368
    • 添加了 `session.serviceWorkerContext` API 来访问基本的 service worker 信息并接收来自 service worker 的控制台日志。 #22313
  • app API 变更
    • 在 macOS 的 `app.focus()` 中添加了一个新的 force 参数,以允许应用强制获取焦点。 #23447
  • BrowserWindow API 变更
    • 在 `BrowserWindow` 上为一些 getter/setter 对添加了属性访问支持。 #23208

已弃用的 API

以下 API 现已弃用或被移除

  • shell.openItem API 现已弃用,并由异步的 `shell.openPath API` 替代。
  • 在 Electron 8.0 中被弃用的 `<webview>.getWebContents` 现已被移除。
  • 在 Electron 8.0 中被弃用的 `webFrame.setLayoutZoomLevelLimits` 现已被移除。

停止支持 6.x.y

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

下一步计划

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

有关 Electron 未来版本中计划的重大更改的信息,请参阅我们的计划中的重大更改文档

contextIsolation 的默认值从 false 更改为 true(从 Electron 10 开始)

在没有 contextIsolation 的情况下,渲染器进程中运行的任何代码都可以相当容易地访问 Electron 内部或应用的预加载脚本。 然后,该代码可以执行 Electron 希望加以限制的特权操作。

更改此默认设置可以提高 Electron 应用程序的默认安全性,因此应用程序将需要故意选择不安全的行为。Electron 将在 Electron 10.0 中弃用 contextIsolation 的当前默认值,并在 Electron 12.0 中更改为新默认值 (true)。

有关 contextIsolation、如何轻松启用它及其安全优势的更多信息,请参阅我们的专用上下文隔离文档

Electron 8.0.0

·7分钟阅读

Electron 8.0.0 已经发布!它包含了 Chromium 80、V8 8.0 和 Node.js 12.13.0 的升级。我们添加了 Chrome 内置的拼写检查器,以及更多功能!


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

重要变更

技术栈变更

重点特性

  • 实现了 Chrome 内置的拼写检查功能。更多详情请参阅 #20692#21266
  • IPC 通信现在使用 v8 的结构化克隆算法。这比现有逻辑更快、功能更丰富、更不容易出错,并将大型缓冲区和复杂对象的性能提升了 2 倍。小消息的延迟并未受到显著影响。更多详情请参阅 #20214

请参阅 8.0.0 发行说明,了解新功能和更改的完整列表。

破坏性变更

  • 在上下文感知模块的弃用警告中显示模块名称。 #21952
    • 这是未来要求在渲染器进程中加载的 Node 原生模块必须是 N-API上下文感知的持续工作。完整信息和拟议时间表详见此议题
  • 通过 IPC 发送的值现在使用结构化克隆算法进行序列化。#20214
  • 由于缺乏维护者来处理此功能,屏幕外渲染 (Offscreen Rendering) 目前已禁用。该功能在 Chromium 升级期间出现故障,随后被禁用。#20772

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

API 更改

  • app API 变更
    • 添加了 app.getApplicationNameForProtocol(url)#20399
    • 在 Windows 上添加了对 app.showAboutPanel()app.setAboutPanelOptions(options) 的支持。 #19420
  • BrowserWindow API 变更
    • 更新了文档,指出 BrowserWindow 的 hasShadow 选项在所有平台上都可用 #20038
    • 向 BrowserWindow 选项添加了 trafficLightPosition 选项,以允许自定义红绿灯按钮的位置。 #21781
    • 向 BrowserWindow 添加了 accessibleTitle 选项,用于设置可访问的窗口标题 #19698
    • BrowserWindow.fromWebContents() 现在可以返回 null #19983
    • 添加了 BrowserWindow.getMediaSourceId()BrowserWindow.moveAbove(mediaSourceId)#18926
    • 在 macOS 上添加了对 will-move 事件的支持。 #19641
  • 为之前未记录的 crashReporter.getCrashesDirectory() 添加了文档。#20417
  • dialog API 变更
    • dialog.showOpenDialogdialog.showOpenDialogSync 添加了 dontAddToRecent 属性,以防止在 Windows 的打开对话框中将文档添加到最近打开的文档列表中。#19669
    • dialog.showSaveDialogdialog.showSaveDialogSync 添加了属性自定义功能。 #19672
  • Notification API 变更
    • 添加了 timeoutType 选项,允许 Linux/Windows 用户设置通知超时的类型。 #20153
    • 添加了 urgency 选项,用于设置 Linux 通知的紧急程度。 #20152
  • session API 变更
    • 更新了关于 session.setProxy(config)session.setCertificateVerifyProc(proc) 的文档,以注明可选选项。 #19604
    • 添加了 session.downloadURL(url),允许在没有 BrowserWindow 的情况下触发下载。 #19889
    • 通过 session.preconnect(options)preconnect 事件添加了对 HTTP 预连接资源提示的支持。 #18671
    • 添加了 session.addWordToSpellCheckerDictionary,允许在字典中添加自定义单词 #21297
  • 在 macOS 上的 shell.moveItemToTrash(fullPath[, deleteOnFail]) 中添加了选项,用于指定 moveItemToTrash 失败时的处理方式。#19700
  • systemPreferences API 变更
    • 更新了 macOS 的 systemPreferences.getColor(color) 文档。 #20611
    • systemPreferences.getMediaAccessStatus() 添加了 screen 媒体类型。 #20764
  • 添加了 nativeTheme.themeSource,允许应用覆盖 Chromium 和操作系统的主题选择。 #19960
  • TouchBar API 变更
    • TouchBarButtonTouchBarLabel 添加了 accessibilityLabel 属性,以改善 TouchBarButton/TouchBarLabel 的可访问性。#20454
    • 更新了 TouchBar 相关文档 #19444
  • tray API 变更
    • tray.displayBalloon() 添加了新选项:iconTypelargeIconnoSoundrespectQuietTime#19544
    • 添加了 tray.removeBalloon(),用于移除已显示的气球通知。 #19547
    • 添加了 tray.focus(),将焦点返回到任务栏通知区域。 feat: add tray.focus() #19548
  • webContents API 变更
    • 向 webContents API 添加了 contents.executeJavaScriptInIsolatedWorld(worldId, scripts[, userGesture]),以公开 executeJavaScriptInIsolatedWorld。#21190
    • 添加了捕获隐藏的 webContents 的方法。 #21679
    • webContents.print([options], [callback]) 添加了选项,以启用打印页面页眉和页脚的自定义。 #19688
    • 通过 webContents.getAllSharedWorkers()webContents.inspectSharedWorkerById(workerId) 添加了检查特定共享工作线程的能力。#20389
    • 在 WebContents.printToPDF() 中添加了对 fitToPageEnabledscaleFactor 选项的支持。 #20436
  • 更新了 webview.printToPDF 文档,以表明返回类型现在是 Uint8Array。 #20505

已弃用的 API

以下 API 现已弃用

  • 在 Electron 9 版本中移除之前,已弃用 BrowserWindow.setVisibleOnAllWorkspaces 中不起作用的 visibleOnFullScreen 选项。#21732
  • 弃用了 macOS 上 systemPreferences.getColor(color)alternate-selected-control-text#20611
  • 由于 Chromium 移除了此功能,已弃用 webContentswebFrame<webview> Tag 上的 setLayoutZoomLevelLimits#21296
  • app.allowRendererProcessReuse 的默认值 false 现已弃用。 #21287
  • 弃用了 <webview>.getWebContents(),因为它依赖于 remote 模块。 #20726

停止对 5.x.y 的支持

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

应用反馈计划

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

下一步计划

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

有关 Electron 未来版本中计划的重大更改的信息,请参阅我们的计划中的重大更改文档

弃用 remote 模块 (从 Electron 9 开始)

由于严重的安全性隐患,我们已开始计划从 Electron 9 开始弃用 remote 模块。您可以阅读并关注 此 issue,其中详细说明了我们弃用的原因,并包含了弃用的时间表。

Electron 7.0.0

·阅读时长 4 分钟

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 install electron@latest 使用 npm 安装,或从我们的发布网站下载。此版本包含大量升级、修复和新功能。我们迫不及待地想看看您会用它们构建出什么!请继续阅读以获取有关此版本的详细信息,并请分享您的任何反馈!

重要变更

  • 技术栈升级

    技术栈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
  • 新增 Windows on Arm (64 位) 版本。#18591, #20112

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

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

  • 切换到新的 TypeScript 定义生成器。生成的定义更精确;因此如果您的 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

·6 分钟阅读

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


新增内容

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

Electron 的大部分功能由 Chromium、Node.js 和 V8 的核心组件提供。Electron 会及时更新这些项目,为用户提供新的 JavaScript 功能、性能改进和安全修复。在 Electron 6 中,这些包中的每一个都经历了主版本号的提升。

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

Promises 化

Electron 6.0 继续了 5.0 中启动的 现代化 Promise 支持改进计划。

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

  • 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

这些函数现在返回 Promises。

Electron Helper (Renderer).appElectron Helper (GPU).appElectron Helper (Plugin).app

为了启用 硬化运行时(它限制了可写可执行内存和加载由不同 Team ID 签名的代码等),必须为 Helper 授予特殊的代码签名权限。

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

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

为了使用这些新的 Helper 应用正确打包您的应用,您需要使用 electron-packager@14.0.4 或更高版本。如果您正在使用 electron-builder,则应关注 此 issue 以跟踪对这些新 Helper 的支持。

破坏性变更

  • 此次发布开始为未来要求渲染进程中加载的本地 Node 模块必须是 N-APIContext Aware 打下基础。此更改的原因是为了提高性能、增强安全性并减轻维护负担。在 此 issue 中阅读包括拟议时间表在内的全部详细信息。此更改预计将在 Electron v11 中完成。

  • net.IncomingMessage 的 headers 略有变化,以更紧密地匹配 Node.js 的行为,特别是在 set-cookie 的值以及如何处理重复的 headers 方面。#17517

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

  • 应用程序现在必须在调用新函数 app.setAppLogPath() 来设置日志路径后,才能使用 app.getPath('log')#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 将达到生命周期结束 (End-Of-Life)。

💬 应用反馈计划

请考虑加入我们的应用反馈计划,以帮助我们测试 beta 版本和稳定化。参与此计划的项目在其应用程序上测试 Electron beta 版本;作为回报,他们发现的新错误将优先在稳定版本中修复。

📝 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

·阅读时长 5 分钟

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


有什么新内容?

Electron 的大部分功能由 Chromium、Node.js 和 V8 的核心组件提供。Electron 会及时跟进这些项目的最新进展,为用户提供新的 JavaScript 功能、性能改进和安全修复。在 Electron 5 中,所有这些包都进行了主版本升级。

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

Promises 化

Electron 5 继续了 Promisification initiative(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 事件,以便 remote.getBuiltinremote.getCurrentWindowremote.getCurrentWebContents<webview>.getWebContents 可以被 过滤

BrowserWindow 上的多个 BrowserViews

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

破坏性变更

打包应用程序的默认设置

打包应用程序现在将与默认应用程序的行为相同:将创建一个默认的应用程序菜单,除非应用程序已有菜单并且 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 隔离世界 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 分钟

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


告别 v8::Handle,迎接 v8::Local

在 2014 年,V8 团队废弃了 v8::Handle,转而使用 v8::Local 作为局部句柄。Electron 5.0 包含了一个 V8 版本,该版本最终彻底移除了 v8::Handle,因此仍然使用它的原生 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 的原生插件,并且由于此问题导致原生插件无法构建,请联系插件作者,看他们是否发布了修复此问题的新版本。如果没有,联系作者(或者打开一个 Pull Request!)可能是您最好的选择。

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的发布计划。您可以在这里找到它。

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

Electron 4.0.0

·7分钟阅读

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


有什么新内容?

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> Tag 的文档。

过滤 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(这是默认值)。如果缺少此挂钩,原生模块将在 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
webviewTagnodeIntegration 的值(如果已设置),否则为 truefalse

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

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

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

webContents.findInPage(text[, options])

medialCapitalAsWordStartwordStart 选项已被弃用,因为它们已在 upstream 中移除。

应用反馈计划

我们在开发 Electron 3.0 时推出的 应用反馈计划 取得了成功,因此我们在开发 4.0 期间也继续进行了该计划。我们要衷心感谢 Atlassian、Discord、MS Teams、OpenFin、Slack、Symphony、WhatsApp 以及其他参与 4.0 Beta 周期计划成员的参与。要了解有关应用反馈计划的更多信息并参与未来的 Beta 测试,请 查看我们关于该计划的博客文章

下一步计划

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

有关 Electron 未来版本中计划的重大变更信息,请参阅我们的“计划中的重大变更”文档