跳到主要内容

43 篇标记为 “Release” 的文章

关于新 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).appElectron Helper (GPU).appElectron Helper (Plugin).app

为了启用硬化运行时,它限制了诸如可写可执行内存和加载由不同团队 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,则应关注 此问题 以跟踪对这些新 helper 的支持。

重大更改

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

  • net.IncomingMessage 标头已略微更改,以更紧密地匹配 Node.js 行为,特别是 set-cookie 的值以及如何处理重复标头。#17517

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

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

对 3.x.y 的支持结束

根据我们的支持策略,3.x.y 已达到生命周期结束。鼓励开发人员和应用程序升级到较新版本的 Electron。

应用反馈计划

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

下一步是什么

在短期内,您可以期望该团队继续专注于跟上构成 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 版本;作为回报,他们发现的新错误将在稳定版本中优先处理。

📝 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 隔离世界 API

webFrame.setIsolatedWorldContentSecurityPolicywebFrame.setIsolatedWorldHumanReadableNamewebFrame.setIsolatedWorldSecurityOrigin 已弃用,取而代之的是 webFrame.setIsolatedWorldInfo

混合沙箱

enableMixedSandbox--enable-mixed-sandbox 命令行开关仍然存在以实现兼容性,但已弃用且无效。

对 2.0.x 的支持结束

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

应用反馈计划

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

下一步是什么

在短期内,您可以期望该团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。尽管我们谨慎地不对发布日期做出承诺,但我们的计划是大约每季度发布带有这些组件新版本的 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 版本和进行稳定化,请考虑加入我们的 App Feedback Program

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 实例(require 发生的位置)作为第二个参数传递,模块名称作为第三个参数传递。相同的事件也会在 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
webviewTagnodeIntegration 的值(如果已设置),否则为 truefalse

请注意:目前存在 一个已知 bug (#9736),如果 contextIsolation 开启,则会阻止 webview 标签工作。请密切关注 GitHub 问题以获取最新信息!

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

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

webContents.findInPage(text[, options])

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

应用反馈计划

我们在 Electron 3.0 开发期间建立的 App Feedback Program 取得了成功,因此我们在 4.0 的开发期间也继续使用了它。我们要向 Atlassian、Discord、MS Teams、OpenFin、Slack、Symphony、WhatsApp 以及其他项目成员表示衷心的感谢,感谢他们在 4.0 beta 周期中的参与。要了解有关 App Feedback Program 的更多信息并参与未来的 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 的开发时,我们试图通过正式化渐进式 beta 版本的反馈流程,更经验性地定义稳定版本的标准。如果没有我们的 App Feedback Program 合作伙伴在 beta 周期期间提供的早期测试和反馈,v3.0.0 将不可能实现。感谢 Atlassian、Atom、Microsoft Teams、Oculus、OpenFin、Slack、Symphony、VS Code 以及其他项目成员的工作。如果您想参与未来的 beta 测试,请发送邮件至 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::Window 重命名为 api::BrowserWindow
  • [#12679] feat: 默认关闭视觉缩放
  • [#12408] refactor: 将 app-command media-play_pause 重命名为 media-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")) 获取用户数据目录,或参阅 文档 了解更多详细信息。

Bug 修复

  • [#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 item 时的事件泄漏
  • [#12352] fix: 托盘标题崩溃
  • [#12327] fix: 不可拖动区域
  • [#12809] fix: 防止菜单在打开时更新
  • [#13162] fix: 托盘图标边界不允许负值
  • [#13085] fix: 突出显示时托盘标题未反转
  • [#12196] fix: enable_run_as_node==false 时的 Mac 构建
  • [#12157] fix: 带有 vibrancy 的无边框窗口的其他问题
  • [#13326] fix: 在调用 app.removeAsDefaultProtocolClient 后将 mac 协议设置为 none
  • [#13530] fix: MAS 构建中不正确地使用私有 API
  • [#13517] fix: tray.setContextMenu 崩溃
  • [#14205] fix: 即使设置了 defaultId,在对话框上按 Esc 键现在也会关闭对话框

Linux

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

其他说明

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

下一步是什么

Electron 团队将继续致力于定义我们的流程,以便更快速、更顺畅地进行升级,因为我们力求最终与 Chromium、Node 和 V8 的开发节奏保持一致。

Electron 2.0.0

·5 分钟阅读

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


发布流程

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

Electron 2.0.0 还代表了在主版本发布之前 Electron 如何稳定化的改进。几个大规模 Electron 应用已在其分阶段推广中包含了 2.0.0 beta 版本,为 beta 系列提供了 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
  • 为将多个 BrowserWindow 聚集到单个进程中添加 affinity 选项。#11501
  • 添加了 saveDialog 列出可用扩展名的功能。#11873
  • 支持其他通知操作 #11647
  • 设置 macOS 通知关闭按钮标题的功能。#11654
  • 为 menu.popup(window, callback) 添加条件
  • touchbar item 中的内存改进。#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

Bug 修复

  • 更改为确保 webContents.isOffscreen() 始终可用。#12531
  • 修复了 DevTools 取消停靠并聚焦时 BrowserWindow.getFocusedWindow() 的问题。#12554
  • 修复了预加载路径包含特殊字符时预加载无法在沙盒渲染器中加载的问题。#12643
  • 根据文档更正了 allowRunningInsecureContent 的默认值。#12629
  • 修复了 nativeImage 上的透明度问题。#12683
  • 修复了 Menu.buildFromTemplate 的问题。#12703
  • 确认 menu.popup 选项是对象。#12330
  • 移除新进程创建和上下文释放之间的竞争条件。#12361
  • 更改 BrowserView 时更新可拖动区域。#12370
  • 修复了焦点上菜单栏切换 alt 键检测的问题。#12235
  • 修复了 webview 中的不正确警告。#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
  • 改进了 vibrancy 支持。#12157 #12171 #11886
  • 修复了 singleton fixture 中的计时问题。
  • 修复了 NotifierSupportsActions() 中的生产缓存损坏问题
  • 使 MenuItem roles 与 camelCase 兼容。#11532
  • 改进了 touch bar 更新。#11812, #11761.
  • 移除了额外的菜单分隔符。#11827
  • 修复了蓝牙选择器 bug。关闭 #11399
  • 修复了 macos 全屏切换菜单项标签。#11633
  • 改进了窗口停用时工具提示的隐藏。#11644
  • 迁移了已弃用的 web-view 方法。#11798
  • 修复了从 browserview 打开的窗口的关闭问题。#11799
  • 修复了蓝牙选择器 bug。#11492
  • 更新为使用任务计划程序进行 app.getFileIcon API。#11595
  • 更改为即使在离屏渲染时也触发 console-message 事件。#11921
  • 修复了使用 WebContents.downloadURL 从自定义协议下载的问题。#11804
  • 修复了 devtools 分离时透明窗口失去透明度的问题。#11956
  • 修复了 Electron 应用取消重启或关机的问题。#11625

macOS

  • 修复了重用 touchbar item 时的事件泄漏。#12624
  • 修复了暗模式下的托盘高亮显示。#12398
  • 修复了异步对话框阻塞主进程的问题。#12407
  • 修复了 setTitle 托盘崩溃问题。#12356
  • 修复了设置 dock 菜单时崩溃的问题。#12087

Linux

Windows

  • 添加了 Visual Studio 2017 支持。#11656
  • 修复了将异常传递给系统崩溃处理程序的问题。#12259
  • 修复了从最小化窗口隐藏工具提示的问题。#11644
  • 修复了 desktopCapturer 以捕获正确的屏幕。#11664
  • 修复了禁用硬件加速与透明度的问题。#11704

下一步是什么

Electron 团队正在努力支持更高版本的 Chromium、Node 和 v8。预计 3.0.0-beta.1 即将发布!

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

·一分钟阅读

Electron 的新主要版本正在开发中,并且随之而来的是我们版本控制策略的一些更改。从 2.0.0 版本开始,Electron 将严格遵守语义化版本控制。


此更改意味着您将更频繁地看到主版本号的提升,并且它通常是对 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

Electron 1.0

·4 分钟阅读

在过去的两年里,Electron 帮助开发者使用 HTML、CSS 和 JavaScript 构建跨平台桌面应用程序。现在我们很高兴与大家分享我们框架和创建它的社区的一个重要里程碑。Electron 1.0 版本现已在 electronjs.org 上发布。


Electron 1.0

Electron 1.0 代表了 API 稳定性和成熟度的重大里程碑。此版本允许您构建在 Windows、Mac 和 Linux 上行为和感觉都真正原生的应用程序。借助新的文档、新工具和一个新的应用程序来引导您了解 Electron API,构建 Electron 应用程序比以往任何时候都更容易。

如果您准备好构建您的第一个 Electron 应用程序,这里有一个快速入门指南来帮助您入门。

我们很高兴看到您接下来使用 Electron 构建什么。

Electron 的路径

当我们发布 Atom 时,我们在两年多前发布了 Electron。Electron,当时被称为 Atom Shell,是我们构建 Atom 的框架。在那些日子里,Atom 是 Electron 提供的特性和功能的驱动力,因为我们努力发布最初的 Atom 版本。

现在驱动 Electron 的是一个不断壮大的开发者和公司社区,他们构建了从 电子邮件聊天Git 应用程序SQL 分析工具种子客户端机器人 的各种应用。

在过去的两年里,我们已经看到公司和开源项目都选择 Electron 作为其应用程序的基础。仅在过去一年中,Electron 的下载量就超过了 120 万次。参观 一些令人惊叹的 Electron 应用程序,如果您的应用程序尚未在那里,请添加它。

Electron downloads

Electron API 演示

随着 1.0 版本的发布,我们正在发布一个新的应用程序,以帮助您探索 Electron API 并了解更多关于如何使您的 Electron 应用程序感觉原生的信息。Electron API 演示 应用程序包含代码片段,以帮助您启动您的应用程序,并提供关于有效使用 Electron API 的技巧。

Electron API Demos

Devtron

我们还添加了一个新的扩展程序来帮助您调试 Electron 应用程序。DevtronChrome 开发者工具 的一个开源扩展程序,旨在帮助您检查、调试和排除 Electron 应用程序的故障。

Devtron

功能

  • Require graph 帮助您可视化应用程序的内部和外部库依赖关系,包括主进程和渲染器进程
  • IPC 监视器 跟踪并显示应用程序中进程之间发送和接收的消息
  • 事件检查器 向您展示在您的应用程序中在核心 Electron API(如窗口、应用程序和进程)上注册的事件和监听器
  • App Linter 检查您的应用程序是否存在常见错误和缺少的功能

Spectron

最后,我们正在发布新版本的 Spectron,Electron 应用程序的集成测试框架。

Spectron

Spectron 3.0 全面支持整个 Electron API,使您可以更快地编写测试,以验证您的应用程序在各种场景和环境中的行为。Spectron 基于 ChromeDriverWebDriverIO,因此它也具有用于页面导航、用户输入和 JavaScript 执行的完整 API。

社区

Electron 1.0 是数百名开发者社区共同努力的结果。在核心框架之外,已经发布了数百个库和工具,以使构建、打包和部署 Electron 应用程序更容易。

现在有一个新的 社区 页面,列出了许多正在开发的很棒的 Electron 工具、应用程序、库和框架。您还可以查看 ElectronElectron Userland 组织,以查看其中一些出色的项目。

Electron 新手?观看 Electron 1.0 介绍视频