跳至主要内容

Electron 12.0.0

·阅读时间:5 分钟

Electron 12.0.0 现已发布!它包含对 Chromium 89、V8 8.9 和 Node.js 14.16 的升级。我们对远程模块进行了更改,为 contextIsolation 设置了新的默认值,添加了新的 webFrameMain API,并进行了总体改进。请阅读以下内容以了解更多详细信息!


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

值得注意的更改

堆栈更改

突出显示的功能

  • 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 更改
    • 将非本地化的 serviceName 添加到 'child-process-gone' / app.getAppMetrics() 中。 #25975
    • 添加了新的 app.runningUnderRosettaTranslation 属性,用于检测在 Apple Silicon 上运行 Rosetta 时的情况。 #26444
    • exitCode 添加到 render-process-gone 详细信息(app 和 webContents)中。 #27677
  • BrowserWindow API 更改
    • 添加了 BrowserWindow.isTabletMode() API。 #25209
    • resized(Windows/macOS)和 moved(Windows)事件添加到 BrowserWindow#26216
    • 添加了新的 system-context-menu 事件,以允许阻止和覆盖系统上下文菜单。 #25795
    • 添加了 win.setTopBrowserView(),以便可以提升 BrowserView#27713
    • 添加了 webPreferences.preferredSizeMode 以允许根据文档的最小尺寸调整视图大小。 #25874
  • contextBridge API 更改
    • 允许 ContextBridge 的 exposeInMainWorld 方法公开非对象 API。 #26834
  • display API 更改
    • displayFrequency 属性添加到 Display 对象,以允许获取 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
    • 添加了 串口 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。 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。 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 硅硬件将在今年晚些时候发布,您让您的 Electron 应用程序在新的硬件上运行的路径是什么样的?


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

它是如何工作的?

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

我需要做什么?

您需要发布两个版本的应用程序:一个用于 x64(Intel Mac),另一个用于 arm64(Apple 硅)。好消息是 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 硬件尚未商业化。如果您拥有开发者过渡工具包,则可以在其上测试您的应用程序。否则,您需要等待生产版 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/fiddleelectron-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 时更容易找到新功能和错误修复。

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

值得注意的更改

堆栈更改

突出显示的功能

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

有关这些更改和未来更改的更多信息,可以在 计划中的重大更改 页面上找到。

API 更改

  • 会话:现在可以通过调用ses.isPersistent()API 检查给定的session是否持久。#22622
  • 内容:添加了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 主要版本。 Electron 11.0.0 的初步时间表概述了 Electron 11.0 开发生命周期中的关键日期。此外,请参阅我们的版本控制文档,以获取有关 Electron 版本控制的更多详细信息。

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

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

我们在Electron 9中开始着手移除 remote 模块,并且我们正在继续计划移除 remote 模块。在 Electron 11 中,我们计划继续进行重构工作,以实现 WeakRef,就像我们在 Electron 10 中所做的那样。请阅读并关注此问题,了解弃用的完整计划和详细信息。

要求本机 Node 模块成为上下文感知或 N-API(在 Electron 12 中)的最后一步

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

从 Electron 6 开始,我们一直在为要求在渲染器进程中加载的原生 Node 模块必须为 N-APIContext Aware 做准备。强制执行此更改可以增强安全性、提高性能并减少维护工作量。此计划的最后一步是在 Electron 12 中移除禁用渲染器进程重用的功能。阅读此问题,了解完整详细信息,包括建议的时间表。

Electron 成为 OpenJS 基金会影响力项目

·阅读时间:1分钟

今天上午在OpenJS World上,我们宣布 Electron 已正式毕业于OpenJS 基金会的孵化计划,现在是 OpenJS 基金会的影响力项目。

Electron于2019年12月在蒙特利尔举行的上一届 OpenJS 基金会全球大会上进入孵化阶段。我们很高兴能够作为影响力项目在 JavaScript 社区中发挥更大的作用,并继续与 OpenJS 基金会合作。


了解更多

您可以在OpenJSF 网站上了解有关基金会、其使命和成员的信息。OpenJS 基金会托管了许多开源 JavaScript 项目,包括 jQuery、Node.js 和 webpack。它得到了包括 GoDaddy、Google、IBM、Intel、Joyent 和 Microsoft 在内的 30 家公司和最终用户成员的支持。

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

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

Google Season of Docs

·阅读时间:2分钟

Electron 很荣幸能参与 Google 的第二届 Season of Docs 计划,该计划将来自开源组织的导师与技术作家配对,以改进项目的文档。


什么是 Season of Docs?

Season of Docs logo

Season of Docs 是一个项目,它促进技术作家和开源社区之间的合作,使双方都受益。开源维护人员利用作家的技术写作专业知识来改进其文档的结构和内容,而技术作家则在导师的指导下接触开源社区。在 Google 的Season of Docs 网站上了解更多信息。

在我们首次参与该计划中,我们将指导一位技术作家,他将与 Electron 的生态系统工作组一起重塑我们文档的大部分内容。您可以在此处了解有关整个项目时间线的更多信息。

如何报名?

您是否有兴趣作为技术作家与我们合作?首先,熟悉 Google 的今年计划的技术作家指南,并查看我们准备好的两个项目想法草案

为了被选为 Electron 的 Season of Docs 技术作家,候选人需要在 6 月 8 日至 7 月 9 日的技术作家申请阶段在 Google Season of Docs 网站上申请。

您的申请应包括一份提案,这是一份书面文件,详细描述您计划在 3 个月内在 Electron 文档中取得的成就。该提案可以扩展项目想法文档中提到的其中一个起点,也可以是全新的内容。不知道从哪里开始?您可以查看去年的已接受提案列表以获取灵感。

除了提案之外,我们还将查看您作为技术作家的背景。请附上您的简历副本,重点介绍相关的写作经验,以及技术写作样本(这些样本可以是现有的文档、教程、博文等)。

如果您想讨论项目提案,请发送电子邮件至[email protected],我们将从那里开始聊天!

参考资料

Electron 9.0.0

·阅读时间:4 分钟

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-APIContext Aware 的持续工作。完整信息和建议的时间表在此问题中详细说明。
  • 通过 IPC 发送非 JavaScript 对象现在会抛出异常。 #21560
    • 此行为在 Electron 8.0 中已弃用。在 Electron 9.0 中,已删除旧的序列化算法,并且发送此类不可序列化的对象现在将抛出“对象无法克隆”错误。

有关这些更改和未来更改的更多信息,可以在 计划中的重大更改 页面上找到。

API 更改

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

已弃用的 API

以下 API 现已弃用或删除

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

6.x.y 版本支持结束

根据项目的支持策略,Electron 6.x.y 已达到支持结束日期。鼓励开发人员和应用程序升级到更新版本的 Electron。

后续计划

短期内,团队将继续专注于跟进构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。虽然我们谨慎起见,不会承诺发布日期,但我们的计划是大约每季度发布 Electron 的新主要版本,其中包含这些组件的新版本。您可以查看Electron 10.0.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 版本

·阅读时间:1分钟

Electron 暂时暂停主要版本发布


发生了什么?

我们的主要版本发布节奏安排与 Chromium 的节奏保持一致,Chromium 项目最近做出了暂停其版本发布的决定,原因是工作安排进行了调整。这意味着在 Chromium 调整节奏期间,Electron 也将暂时暂停新的主要版本发布。

我们认为,最好的选择是跟随 Chromium 的脚步,因此,在此期间,Electron 团队将全力投入错误修复、安全、性能和稳定性方面的工作。

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

有关更多更新,请关注我们的Twitter 帐户

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

Electron 8.0.0

·阅读时间:6分钟

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-APIContext Aware 的持续工作。完整信息和建议的时间表在此问题中详细说明。
  • 通过 IPC 发送的值现在使用结构化克隆算法进行序列化。#20214
  • 由于缺乏维护人员来处理此功能,因此目前已禁用离屏渲染。它在 Chromium 升级期间出现故障,随后被禁用。#20772

有关这些更改和未来更改的更多信息,可以在 计划中的重大更改 页面上找到。

API 更改

  • app API 更改
    • 添加了 app.getApplicationNameForProtocol(url)#20399
    • 在 Windows 上添加了 app.showAboutPanel()app.setAboutPanelOptions(options) 支持。#19420
  • BrowserWindow API 更改
    • 更新了文档,以说明 BrowserWindow 选项 hasShadow 在所有平台上都可用#20038
    • trafficLightPosition 选项添加到 BrowserWindow 选项,以允许自定义交通灯按钮的位置。#21781
    • accessibleTitle 选项添加到 BrowserWindow 以设置可访问的窗口标题#19698
    • BrowserWindow.fromWebContents() 现在可以返回 null#19983
    • 添加了 BrowserWindow.getMediaSourceId()BrowserWindow.moveAbove(mediaSourceId)#18926
    • 在 macOS 上添加了对 will-move 事件的支持。#19641
  • 记录了以前未记录的 crashReporter.getCrashesDirectory()#20417
  • dialog API 更改
    • dontAddToRecent 属性添加到 dialog.showOpenDialogdialog.showOpenDialogSync,以防止在 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
    • screen 媒体类型添加到 systemPreferences.getMediaAccessStatus()#20764
  • 添加了 nativeTheme.themeSource 以允许应用程序覆盖 Chromium 和操作系统的主题选择。#19960
  • TouchBar API 更改
    • accessibilityLabel 属性添加到 TouchBarButtonTouchBarLabel 以提高 TouchBarButton/TouchBarLabel 的可访问性。#20454
    • 更新了与 TouchBar 相关的文档#19444
  • tray API 更改
    • 将新的选项添加到 tray.displayBalloon()iconTypelargeIconnoSoundrespectQuietTime#19544
    • 添加了 tray.removeBalloon(),它会删除已显示的气泡通知。#19547
    • 添加了 tray.focus(),它会将焦点返回到任务栏通知区域。feat: add tray.focus() #19548
  • webContents API 变更
    • 添加了 contents.executeJavaScriptInIsolatedWorld(worldId, scripts[, userGesture]) 以在 webContents API 上公开 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 现已弃用

  • 在下一个主要版本中将其删除之前,弃用了 BrowserWindow.setVisibleOnAllWorkspaces 中的功能不完善的 visibleOnFullScreen 选项。#21732
  • 弃用了 macOS 的 systemPreferences.getColor(color) 上的 alternate-selected-control-text#20611
  • 弃用了 webContentswebFrame<webview> 标签上的 setLayoutZoomLevelLimits,因为 Chromium 已删除此功能。#21296
  • app.allowRendererProcessReusefalse 默认值现已弃用。#21287
  • 弃用了 <webview>.getWebContents(),因为它依赖于远程模块。#20726

5.x.y 版本的支持结束

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

应用程序反馈计划

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

后续计划

在短期内,您可以期待团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。虽然我们谨慎地不承诺发布日期,但我们的计划是大约每季度发布 Electron 的新主要版本,其中包含这些组件的新版本。9.0.0 的初步计划概述了 Electron 9 开发生命周期中的关键日期。此外,请参阅我们的版本控制文档,以获取有关 Electron 版本控制的更多详细信息。

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

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

由于存在严重的安全性问题,我们开始计划从 Electron 9 开始弃用remote 模块。您可以阅读并关注此问题,其中详细说明了我们这样做的原因,并包含了提议的弃用时间表。