跳转到主要内容

45 篇标记为“Release”的帖子

关于 Electron 新发布的博客文章

查看所有标签

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` 来安装它,或者从我们的 发布网站 下载。本次发布包含了大量的升级、修复和新功能。我们迫不及待地想看到你们用它们构建出什么!请继续阅读以了解本次发布的详细信息,并欢迎分享您的任何反馈!

重要变更

技术栈变更

重点特性

  • 实现了 Chrome 内置拼写检查功能。更多详细信息请参见 #20692#21266
  • IPC 通信现在使用 v8 的结构化克隆算法。这比现有逻辑更快、功能更丰富、更少出乎意料,并为大型缓冲区和复杂对象带来了 2 倍的性能提升。小消息的延迟没有显著影响。更多详细信息请参见 #20214

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

破坏性变更

  • 在上下文感知模块的弃用警告中显示模块名称。 #21952
    • 这是为未来要求渲染进程中加载的原生 Node 模块必须是 N-APIContext Aware 的一项持续工作。完整的相关信息和拟议时间表详见 此 issue
  • 通过 IPC 发送的值现在使用结构化克隆算法进行序列化。#20214
  • 由于缺乏维护者来处理此功能,屏幕外渲染目前已禁用。在 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.showOpenDialog` 和 `dialog.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 变更
    • 在 `TouchBarButton` 和 `TouchBarLabel` 中添加了 `accessibilityLabel` 属性,以提高 TouchBarButton/TouchBarLabel 的可访问性。 #20454
    • 更新了 TouchBar 相关文档 #19444
  • tray API 变更
    • 在 `tray.displayBalloon()` 中添加了新的选项:`iconType`、`largeIcon`、`noSound` 和 `respectQuietTime`。 #19544
    • 添加了 tray.removeBalloon(),用于移除已显示的气球通知。 #19547
    • 添加了 tray.focus(),将焦点返回到任务栏通知区域。 feat: add tray.focus() #19548
  • webContents API 变更
    • 在 WebContents API 上公开了 `contents.executeJavaScriptInIsolatedWorld(worldId, scripts[, userGesture])`,用于在隔离世界中执行 JavaScript。 #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
  • 弃用了 `webContents`、`webFrame` 和 `` 标签上的 `setLayoutZoomLevelLimits`,因为 Chromium 已移除此功能。 #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 主要版本。 暂定的 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` 来安装它,或者从我们的 发布网站 下载。本次发布包含了大量的升级、修复和新功能。我们迫不及待地想看到你们用它们构建出什么!请继续阅读以了解本次发布的详细信息,并欢迎分享您的任何反馈!

重要变更

  • 技术栈升级

    技术栈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` 来安装它,或者从我们的 发布网站 下载。本次发布包含了大量的升级、修复和新功能。我们迫不及待地想看到你们用它们构建出什么!请继续阅读以了解本次发布的详细信息,并欢迎分享您的任何反馈!


新增内容

今天标志着 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` 的头部已 略有更改,以更紧密地匹配 Node.js 的行为,特别是在 `set-cookie` 的值和重复头部如何处理方面。 #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 将达到生命周期终点。

💬 应用反馈计划

请考虑加入我们的 应用反馈计划,以帮助我们测试 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

·阅读时长 5 分钟

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


有什么新内容?

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

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

Promises 化

Electron 5 继续了 Promisification initiative 计划,将 Electron 基于回调的 API 转换为使用 Promises。这些 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 主要版本。 暂定的 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` 进行安装。本次发布包含了大量的升级、修复和新功能,我们迫不及待地想看到你们用它们构建出什么。阅读更多以了解本次发布的详细信息,并在探索时分享您的任何反馈!


有什么新内容?

Electron 的大部分功能由构成 Electron 的核心组件 Chromium、Node.js 和 V8 提供。因此,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()` 来阻止模块被加载。发生 `require` 的 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
webviewTagnodeIntegration 的值(如果已设置),否则为 truefalse

请注意:目前存在 一个已知 bug(#9736),如果 `contextIsolation` 为开启状态,它将导致 `webview` 标签无法正常工作。请关注 GitHub issue 以获取最新信息!

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 未来版本中计划的重大变更信息,请参阅我们的“计划中的重大变更”文档

Electron 3.0.0

·6 分钟阅读

Electron 团队很高兴地宣布 Electron 3 的首个稳定版现已从 electronjs.org 和通过 `npm install electron@latest` 提供!它包含了大量的升级、修复和新功能,我们迫不及待地想看到你们用它们构建出什么。下面是关于本次发布的详细信息,我们在欢迎您探索的同时,也欢迎您的反馈。


发布流程

在进行 `v3.0.0` 的开发时,我们试图通过正式化渐进式 Beta 版本反馈流程来更实证地定义稳定发布的标准。没有我们的 应用反馈计划 合作伙伴,v3.0.0 是不可能实现的,他们提供了 Beta 周期内的早期测试和反馈。感谢 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] 重构: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] 修复:加载带有 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: Mac 构建时 enable_run_as_node==false 的问题
  • [#12157] fix: 无边框窗口配合 vibrancy 时的额外问题
  • [#13326] fix: 在调用 app.removeAsDefaultProtocolClient 后设置 mac 协议为 none
  • [#13530] fix: MAS 构建中私有 API 的不正确使用
  • [#13517] fix: tray.setContextMenu 崩溃
  • [#14205] fix: 按下 escape 键关闭对话框,即使设置了 defaultId

Linux

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

其他说明

  • PDF 查看器目前无法工作,但我们正在积极修复,并将尽快恢复其功能。
  • TextFieldButton API 仍处于实验阶段,因此默认关闭。
    • 可以通过 enable_view_api 构建标志启用它们。

下一步计划

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

Electron 2.0.0

·7分钟阅读

经过四个多月的开发、八个 Beta 版本以及来自许多应用程序分阶段推出的全球测试,Electron 2.0.0 的发布现已从 electronjs.org 提供。


发布流程

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

Electron 2.0.0 在主要版本发布前的稳定性改进方面也取得了进展。几款大型 Electron 应用程序已将 2.0.0 beta 版本纳入其灰度发布计划,为 Electron 的 beta 系列提供了有史以来最好的反馈循环。

更改 / 新功能

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

API 重大更改

  • 移除了 已弃用的 API,包括
    • 更改了 `menu.popup` 的签名。 #11968
    • 移除了已弃用的 `crashReporter.setExtraParameter` #11972
    • 移除了已弃用的 `webContents.setZoomLevelLimits` 和 `webFrame.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
  • 改进了视觉效果支持。 #12157 #12171 #11886
  • 修复了单例 fixture 中的计时问题。
  • 修复了 NotifierSupportsActions() 中损坏的生产缓存
  • 使 MenuItem 角色兼容 camelCase。 #11532
  • 改进了触控栏更新。 #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
  • 修复了透明窗口在开发者工具分离时失去透明度的问题。 #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!