跳转到主要内容

Electron 12.0.0

·7分钟阅读

Electron 12.0.0 已发布!它包含了 Chromium 89、V8 8.9 和 Node.js 14.16 的升级。我们对 remote 模块进行了更改,为 contextIsolation 设置了新的默认值,添加了新的 webFrameMain API,并进行了通用改进。请继续阅读以了解更多详情!


Electron 团队很高兴地宣布 Electron 12.0.0 的发布!您可以使用 npm 通过 npm install electron@latest 进行安装,或从我们的 发布网站 下载。请继续阅读以了解此版本的详细信息,并请分享您的任何反馈!

重要变更

技术栈变更

重点特性

  • ContextBridge 的 exposeInMainWorld 方法现在可以暴露非对象 API。 #26834
  • 从 Node 12 升级到 Node 14。 #23249
  • 添加了新的 webFrameMain API,用于从主进程访问 WebContents 实例的子框架。 #25464
  • contextIsolationworldSafeExecuteJavaScript 的默认值现已为 true#27949 #27502

请参阅 12.0.0 版本说明 以获取新功能和更改的完整列表。

破坏性变更

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

API 更改

  • 添加了 webFrameMain API:webFrameMain 模块可用于查找现有 WebContents 实例中的框架。这是现有 webFrame API 的主进程等效项。有关此新 API 的更多信息,可以在 此处以及我们的 文档中找到。
  • app API 变更
    • 'child-process-gone' / app.getAppMetrics() 添加了非本地化的 serviceName#25975
    • 添加了新的 app.runningUnderRosettaTranslation 属性,用于检测在 Apple silicon 上通过 Rosetta 运行时的情况。 #26444
    • render-process-gone 详细信息(app 和 webContents)添加了 exitCode#27677
  • BrowserWindow API 变更
    • 添加了 BrowserWindow.isTabletMode() API。 #25209
    • BrowserWindow 添加了 resized(Windows/macOS)和 moved(Windows)事件。 #26216
    • 添加了新的 system-context-menu 事件,以允许阻止和覆盖系统上下文菜单。 #25795
    • 添加了 win.setTopBrowserView(),以便可以提升 BrowserView#27713
    • 添加了 webPreferences.preferredSizeMode,以允许根据文档的最小尺寸调整视图大小。 #25874
  • contextBridge API 更改
    • 允许 ContextBridge exposeInMainWorld 方法暴露非对象 API。 #26834
  • display API 更改
    • Display 对象添加了 displayFrequency 属性,以允许获取有关 Windows 上刷新率的信息。 #26472
  • extensions API 更改
    • 添加了对某些 chrome.management API 的支持。 #25098
  • MenuItem API 更改
    • 添加了对显示 macOS 共享菜单的支持。 #25629
  • net API 更改
    • net.request() 添加了新的 credentials 选项。 #25284
    • 添加了 net.online,用于检测当前是否有互联网连接。 #21004
  • powerMonitor API 更改
    • 添加了 powerMonitor.onBatteryPower#26494
    • 在 macOS 上向 powerMonitor 添加了快速用户切换事件。 #25321
  • session API 变更
    • ses.loadExtension() API 添加了 allowFileAccess 选项。 #27702
    • session.setPermissionRequestHandler 添加了 display-capture API。 #27696
    • session.setSSLConfig 添加了 disabledCipherSuites 选项。 #25818
    • session 添加了 extension-loadedextension-unloadedextension-ready 事件。 #25385
    • 添加了 session.setSSLConfig(),以允许配置 SSL。 #25461
    • session.setProxy() 中添加了对显式指定 directauto_detectsystem 模式的支持。#24937
    • 添加了 Serial API 支持。 #25237
    • 添加了启用/禁用拼写检查器的 API。 #26276
  • shell API 变更
    • 添加了一个新的异步 shell.trashItem() API,取代了同步的 shell.moveItemToTrash()#25114
  • webContents API 变更
    • 向控制台添加了一个小控制台提示,以帮助调试渲染器崩溃。 #25317
    • 在 webRequest 处理程序中的详细信息对象中添加了 framewebContents 属性。 #27334
    • 添加了 webContents.forcefullyCrashRenderer(),用于强制终止渲染器进程,以协助恢复挂起的渲染器。 #25580
    • 为渲染器创建的子窗口添加了 setWindowOpenHandler API,并弃用了 new-window 事件。 #24517
  • webFrame API 更改
    • 向渲染器添加了拼写检查 API。 #25060

移除/弃用的变更

以下 API 已被移除或现已弃用

  • 已弃用 remote 模块。它已被 @electron/remote 取代。#25293
  • 移除了已弃用的 crashReporter API。 #26709
  • 从打包应用程序的默认“帮助”菜单中移除了指向 Electron 网站的链接。 #25831

9.x.y 版本停止支持

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

下一步计划

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

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

Electron 11.0.0

·阅读时长 4 分钟

Electron 11.0.0 已发布!它包含了 Chromium 87、V8 8.7 和 Node.js 12.18.3 的升级。我们增加了对 Apple 芯片的支持,以及通用改进。详情请阅读下文!


Electron 团队很高兴地宣布 Electron 11.0.0 正式发布!您可以通过 npm 安装:npm install electron@latest,或者从我们的发布网站下载。此版本包含大量升级、修复以及对 Apple M1 硬件的新支持。

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

重要变更

技术栈变更

重点特性

请参阅 11.0.0 发布说明 以获取新功能和更改的完整列表。

破坏性变更

  • 移除了实验性 API:BrowserView.{fromId, fromWebContents, getAllViews}BrowserViewid 属性。#23578

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

API 更改

  • 添加了 app.getApplicationInfoForProtocol() API,该 API 返回处理特定协议的应用程序的详细信息。#24112
  • 添加了 app.createThumbnailFromPath() API,该 API 根据文件路径和最大缩略图尺寸返回文件的预览图像。#24802
  • 添加了 webContents.forcefullyCrashRenderer() 以强制终止渲染进程,从而帮助恢复挂起的渲染进程。#25756

8.x.y 版本停止支持

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

下一步计划

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

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

继续致力于废弃 remote 模块

我们在 Electron 9 中开始致力于移除 remote 模块。我们计划在 Electron 14 中移除 remote 模块本身。

阅读并关注 此问题 以获取完整的弃用计划和详细信息。

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

从 Electron 6 开始,我们一直在为要求渲染器进程中加载的原生 Node 模块必须是N-API上下文感知而奠定基础。强制执行此更改可以增强安全性、提高性能并减少维护工作量。此计划的最后一步是在 Electron 12 中移除禁用渲染进程重用的功能。

阅读并关注 此问题 以获取完整详细信息,包括拟议的时间表。

Apple Silicon 支持

·3 分钟阅读

随着 Apple Silicon 硬件将在今年晚些时候发布,您该如何让自己的 Electron 应用在新硬件上运行呢?


随着 Electron 11.0.0-beta.1 的发布,Electron 团队现在正在发布可在 Apple 新的 Apple Silicon 硬件上运行的 Electron 版本,Apple 计划在今年晚些时候推出这些硬件。您可以通过 npm install electron@beta 获取最新测试版,或直接从我们的发布网站下载。

它是如何运作的?

从 Electron 11 开始,我们将为 Intel Mac 和 Apple Silicon Mac 发布单独的 Electron 版本。在此更改之前,我们已经发布了两个工件:darwin-x64mas-x64,后者用于 Mac App Store 兼容性。现在,我们正在发布另外两个工件:darwin-arm64mas-arm64,它们是上述工件的 Apple Silicon 等效版本。

我需要做什么?

您需要发布两个版本的应用程序:一个用于 x64 (Intel Mac),一个用于 arm64 (Apple Silicon)。好消息是 electron-packagerelectron-rebuildelectron-forge 已经支持以 arm64 架构为目标。只要您运行的是这些软件包的最新版本,一旦您将目标架构更新为 arm64,您的应用程序就应该能完美运行。

将来,我们将发布一个包,允许您将 arm64x64 应用程序“合并”为一个通用二进制文件,但值得注意的是,这个二进制文件将会非常大,可能不适合分发给用户。

更新:该包现已在 @electron/universal 上提供。您可以用它来将两个已打包的 x64 和 arm64 应用合并成一个单一的二进制文件。

潜在问题

原生模块

由于您要面向一个新的架构,您需要更新一些依赖项,这可能会导致构建问题。下面列出了一些依赖项的最低版本要求,供您参考。

依赖项版本要求
Xcode>=12.2.0
node-gyp>=7.1.0
electron-rebuild>=1.12.0
electron-packager>=15.1.0

由于这些依赖项的版本要求,您可能需要修复或更新某些原生模块。值得注意的是,Xcode 升级会引入新版本的 macOS SDK,这可能会导致您的原生模块构建失败。

我该如何测试?

目前,Apple Silicon 应用程序只能在 Apple Silicon 硬件上运行,而撰写此博客文章时,该硬件尚未商用。如果您有 开发者过渡套件,您可以在其上测试您的应用程序。否则,您将不得不等待生产型 Apple Silicon 硬件的发布,才能测试您的应用程序是否正常工作。

Rosetta 2 怎么样?

Rosetta 2 是 Apple Rosetta 技术的最新迭代,它允许您在新 arm64 Apple Silicon 硬件上运行 x64 Intel 应用程序。尽管我们相信 x64 Electron 应用程序将在 Rosetta 2 下运行,但仍有一些重要事项需要注意(以及您应该发布原生 arm64 二进制文件的原因)。

  • 您的应用程序性能将显著降低。Electron / V8 使用 JIT 编译 JavaScript,并且由于 Rosetta 的工作方式,您将有效地运行两次 JIT(一次在 V8 中,一次在 Rosetta 中)。
  • 您将失去 Apple Silicon 中新技术带来的好处,例如更大的内存页大小。
  • 我们有没有提到过性能会显著下降?

社区 Discord 服务器与 Hacktoberfest

·3 分钟阅读

加入我们,共同庆祝开源,进行社区互动,历时整月。


Hacktoberfest and Discord banner

Electron 社区 Discord 启动

Electron 的 外联工作组 非常激动地宣布推出我们的官方社区 Discord 服务器!

为什么是新的 Discord 服务器?

在早期,作为 Atom 文本编辑器 的支柱,关于 Electron 框架的社区讨论曾在一个 Atom Slack 工作区的频道中进行。随着时间的推移,两个项目日益脱钩,Atom 工作区对 Electron 项目的相关性逐渐降低,维护者在 Slack 频道中的参与度也随之下降。

到目前为止,我们仍然将更广泛的社区引导至 Atom Slack 工作区,尽管我们收到了许多关于用户难以收到邀请的报告,而且我们的一些核心维护者也很少在该频道活跃。

我们正在建立这个全新的服务器,作为社区的中心讨论平台,您可以在此获取关于 Electron 所有内容的最新消息。

快来加入我们!

到目前为止,服务器的成员包括几位正在共同努力设置服务器的维护者,但我们非常期待与大家交流!随时可以来寻求帮助,了解 Electron 的最新发布信息,或者只是与其他开发者一起交流。我们有一个方便的 邀请链接,可以让你进入服务器!

Hacktoberfest 2020

作为一个大型且历史悠久的开源项目,Electron 的成功离不开社区的各种贡献,从代码提交到错误报告再到文档修改,以及更多。因此,我们深信参与 Hacktoberfest 的重要性,以吸引更广泛的、各种技能水平的开发者社区加入本项目。

零碎事宜

今年,我们没有更广泛的项目可以供大家完成,但我们希望专注于为整个 Electron JavaScript 生态系统贡献机会。

请留意我们在各个仓库中标记为 hacktoberfest 的问题,包括主要的 electron/electron 仓库,electron/electronjs.org 网站,electron/fiddle,以及 electron-userland/electron-forge

附注:如果您觉得很有挑战性,我们还有一个标记有 help wanted 标签的问题积压,如果您正在寻找更大的挑战。

遇到困难?快来和我们聊聊!

此外,我们的 Discord 服务器正式启用恰逢一年中最大的开源软件庆祝活动,这并非巧合。请查看 #hacktoberfest 频道,以获得关于您的 Hacktoberfest PR 的帮助。如果您错过了,邀请链接在此

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 成为 OpenJS 基金会影响力项目

·一分钟阅读

今天上午在 OpenJS World 上,我们宣布 Electron 已正式完成 OpenJS 基金会的孵化计划,并成为 OpenJS 基金会的重要项目。

Electron 于 2019 年 12 月在蒙特利尔举行的上一次 OpenJS 基金会全球大会上进入孵化阶段。作为重要项目,我们很高兴能在 JavaScript 社区中扮演更重要的角色,并继续与 OpenJS 基金会合作。


了解更多

您可以在 OpenJSF 网站上了解该基金会、其使命及其成员。OpenJS 基金会托管着包括 jQuery、Node.js 和 webpack 在内的众多开源 JavaScript 项目。它得到了 30 个企业和最终用户成员的支持,包括 GoDaddy、Google、IBM、Intel、Joyent 和 Microsoft。

Electron 是一个开源框架,用于使用 Web 技术构建跨平台桌面应用程序。要了解有关 Electron 背后的开发人员以及他们如何协同工作的更多信息,请查看我们的 治理页面

要开始使用 Electron 本身,请查看 我们的文档

谷歌文档季

·3 分钟阅读

Electron 很荣幸能参与第二届 Google 文档季活动。该活动旨在让开源项目的技术作者与导师进行合作,以改善项目文档。


什么是文档季?

Season of Docs logo

Season of Docs 是一个旨在促进技术写作者与开源社区之间协作,从而使双方受益的计划。开源维护者利用写作者的技术写作专业知识来改进其文档的结构和内容,而技术写作者则在导师的指导下接触开源社区。您可以在 Google 的 Season of Docs 网站上了解更多信息。

作为首次参与该计划,我们将指导一名技术写作者,他将与 Electron 的 生态系统工作组 合作,重塑我们文档的大部分内容。您可以在此处了解整个项目的时间线。

我该如何报名?

您是否有兴趣作为技术写作者与我们合作?首先,请熟悉 Google 今年计划的技术写作者指南,并查看我们准备的两个项目构思草稿

为了被选为 Electron 文档季的技术作者,候选人需要在 6 月 8 日至 7 月 9 日期间的技术作者申请阶段,在 Google 文档季网站上进行申请。

您的申请应包含一份提案,这是一份书面文件,详细说明您计划在 3 个月内通过 Electron 文档实现的目标。此提案可以基于我们项目构思文档中提到的起点之一进行开发,也可以是全新的。不知道从何开始?您可以查看去年的已接受提案列表以获取灵感。

除了提案,我们还将关注您作为技术写作者的背景。请附上一份简历副本,重点突出相关的写作经验,以及技术写作范例(这些范例可以是现有文档、教程、博客文章等)。

如果您想讨论项目提案,请发送电子邮件至 season-of-docs@electronjs.org,我们可以从那里开始交流!

参考

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 版本

·一分钟阅读

Electron 暂时暂停重大版本发布


发生了什么?

我们的 主要版本发布周期时间表 与 Chromium 同步,而 Chromium 项目最近决定 暂停发布,这是由于调整了工作计划。这意味着在 Chromium 调整发布周期的这段时间里,Electron 也将暂时暂停新的主要版本发布。

我们认为最好的选择是跟随 Chromium 的步伐,因此在此期间,Electron 团队将转为全职投入到 Bug 修复、安全、性能和稳定性工作中。

我们希望在此期间能优先考虑维护者和用户的福祉,因此我们欢迎您的反馈,并期待恢复正常的发布计划。

更多更新,请关注我们的 Twitter 账号

编辑(2020-03-30):Electron 9 稳定版将以 Chromium M83 为目标,并于 2020 年 5 月 19 日发布,以响应 Chromium 跳过 M82 稳定日期并调整 M83 稳定日期 的公告。

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,其中详细说明了我们弃用的原因,并包含了弃用的时间表。