跳转到主要内容

45 篇带有“发布”标签的帖子

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

值得注意的变更

堆栈变更

突出显示功能

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

有关新功能和更改的完整列表,请参见8.0.0 发行说明

重大变更

  • 在上下文感知模块的弃用警告中显示模块名称。#21952
    • 这是为将来要求在渲染器进程中加载的本机 Node 模块是N-API上下文感知而继续进行的工作。完整信息和拟议时间表在此问题中详细说明。
  • 现在,通过 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 和 OS 的主题选择。#19960
  • TouchBar API 变更
    • accessibilityLabel 属性添加到 TouchBarButtonTouchBarLabel 以改善 TouchBarButton/TouchBarLabel 的可访问性。#20454
    • 更新了 TouchBar 相关文档 #19444
  • tray API 变更
    • 将新选项添加到 tray.displayBalloon()iconTypelargeIconnoSoundrespectQuietTime#19544
    • 添加了 tray.removeBalloon(),它删除已显示的通知。#19547
    • 添加了 tray.focus(),它将焦点返回到任务栏通知区域。feat: 添加 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.allowRendererProcessReuse 的默认值 false#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 模块。您可以阅读并关注 此问题,其中详细说明了我们这样做的原因,并包含了提议的弃用时间表。

Electron 7.0.0

·阅读时长 4 分钟

Electron 7.0.0 已经发布!它包括 Chromium 78、V8 7.8 和 Node.js 12.8.1 的升级。我们添加了 Window on Arm 64 版本、更快的 IPC 方法、新的 nativeTheme API 以及更多内容!


Electron 团队很高兴地宣布 Electron 7.0.0 的发布!您可以使用 npm 通过 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 8。 #18413
  • 文件 electron.asar 不再存在。 任何依赖于其存在的打包脚本都应更新。 #18577

结束对 4.x.y 的支持

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

应用反馈计划

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

下一步是什么

在短期内,您可以期望该团队继续专注于跟上构成 Electron 的主要组件的开发,包括 Chromium、Node 和 V8。 虽然我们小心地不承诺发布日期,但我们的计划是大约每季度发布带有这些组件新版本的 Electron 的新主要版本。 暂定的 8.0.0 时间表 规划了 Electron 8 开发生命周期中的关键日期。 此外,请参阅我们的版本控制文档,以获取有关 Electron 中版本控制的更详细信息。

有关即将发布的 Electron 版本中计划的重大更改的信息,请参阅我们的计划的重大更改文档

Electron 6.0.0

·阅读时长 6 分钟

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

这些函数现在返回 Promises

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

为了启用 hardened runtime,它限制了诸如可写可执行内存和加载由不同团队 ID 签名的代码等内容,因此需要授予 Helper 特殊的代码签名权利。

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

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

为了使用这些新的助手正确地打包您的应用程序,您需要使用 electron-packager@14.0.4 或更高版本。 如果您正在使用 electron-builder,您应该关注 此问题,以跟踪对这些新助手的支持。

重大变更

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

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

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

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

结束对 3.x.y 的支持

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

应用反馈计划

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

下一步是什么

在短期内,您可以期望该团队继续专注于跟上构成 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

·阅读时长 5 分钟

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

拼写检查器现在是异步的

拼写检查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.setIsolatedWorldContentSecurityPolicy,webFrame.setIsolatedWorldHumanReadableName, webFrame.setIsolatedWorldSecurityOrigin已被弃用,取而代之的是webFrame.setIsolatedWorldInfo

混合沙盒

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

停止支持2.0.x

根据我们的支持的版本政策,2.0.x已停止使用。

应用反馈计划

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

下一步是什么

在短期内,您可以期望该团队继续专注于跟上构成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,该API与V8分开维护,是Node.js的一部分,旨在使本机插件免受底层JavaScript引擎的更改的影响。 您可以在Node.js网站上的N-API文档中找到更多信息。

救命! 我在我的应用程序中使用了一个本机插件,但它无法正常工作!

如果您在应用程序中使用Node.js的本机插件,并且由于此问题而导致本机插件无法构建,请与该插件的作者联系,以查看他们是否发布了修复该问题的新版本。 如果没有,那么联系作者(或打开拉取请求!)可能是您的最佳选择。

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

·7 分钟阅读

Electron团队很高兴地宣布,Electron 4的稳定版本现已推出! 您可以从electronjs.org或通过npm从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(),以防止加载该模块。 发生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上加载,并显示类似找不到模块的错误消息。 请参阅本机模块指南以获取更多信息。

弃用

以下重大更改计划用于Electron 5.0,因此在Electron 4.0中已弃用。

nativeWindowOpen-ed Windows禁用Node.js集成

从Electron 5.0开始,使用nativeWindowOpen选项打开的子窗口将始终禁用Node.js集成。

webPreferences默认值

使用webPreferences选项集创建新的BrowserWindow时,以下webPreferences选项默认值已弃用,取而代之的是下面列出的新默认值

属性已弃用的默认值新的默认值
contextIsolationfalsetrue
nodeIntegrationtruefalse
webviewTag如果设置了nodeIntegration,则为nodeIntegration的值,否则为truefalse

请注意:当前存在一个已知错误(#9736),该错误阻止了webview标签在contextIsolation打开时无法正常工作。 请密切注意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

·阅读时长 6 分钟

Electron团队很高兴地宣布,Electron 3的第一个稳定版本现已从electronjs.org获得,并通过npm install electron@latest获得! 它充满了升级、修复和新功能,我们迫不及待地想看到您使用它们构建的内容。 以下是有关此版本的详细信息,我们欢迎您在探索时提供反馈。


发布过程

当我们进行v3.0.0的开发时,我们试图通过正式确定渐进式Beta版本的反馈进度,从而更经验地定义稳定版本的标准。 没有我们的App Feedback Program合作伙伴,就不可能实现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] 功能:node fs 封装器,使 fs.realpathSync.nativefs.realpath.native 可用

API 破坏性变更

  • [#12362] 功能:菜单项顺序控制更新
  • [#13050] 重构:移除已记录的已弃用 API
    • 更多细节请参阅 文档
  • [#12477] 重构:移除 did-get-response-detailsdid-get-redirect-request 事件
  • [#12655] 功能:默认禁用拖放时的导航
  • [#12993] 功能:使用 electron npm 模块需要 Node v4.x 或更高版本
  • [#12008 #12140 #12503 #12514 #12584 #12596 #12637 #12660 #12696 #12716 #12750 #12787 #12858] 重构:NativeWindow
  • [#11968] 重构:menu.popup()
  • [#8953] 功能:不再使用 JSON 发送 ipcRenderer.sendSync 的结果
  • [#13039] 功能:默认忽略 URL 之后的命令行参数
  • [#12004] 重构:将 api::Window 重命名为 api::BrowserWindow
  • [#12679] 功能:默认关闭视觉缩放
  • [#12408] 重构:将 app-command media-play_pause 重命名为 media-play-pause

macOS

  • [#12093] 功能:工作区通知支持
  • [#12496] 功能:tray.setIgnoreDoubleClickEvents(ignore) 忽略托盘双击事件。
  • [#12281] 功能:macOS 上的鼠标前进功能
  • [#12714] 功能:屏幕锁定/解锁事件

Windows

  • [#12879] 功能:添加了 DIP 与屏幕坐标之间的转换

请注意: 运行此版本后切换到旧版本的 Electron 将需要清除用户数据目录,以避免旧版本崩溃。 您可以通过运行 console.log(app.getPath("userData")) 来获取用户数据目录,或者参阅 文档 了解更多详情。

Bug 修复

  • [#13397] 修复:fs.statSyncNoException 抛出异常的问题
  • [#13476, #13452] 修复:加载带有 jquery 的网站时崩溃
  • [#14092] 修复:net::ClientSocketHandle 析构函数中的崩溃
  • [#14453] 修复:立即通知焦点变化,而不是在下一个 tick

MacOS

  • [#13220] 修复:允许在 <input file="type"> 打开文件对话框中选择 bundle 的问题
  • [#12404] 修复:使用异步对话框时阻塞主进程的问题
  • [#12043] 修复:上下文菜单点击回调
  • [#12527] 修复:重复使用触控栏项目时的事件泄漏
  • [#12352] 修复:托盘标题崩溃
  • [#12327] 修复:不可拖动区域
  • [#12809] 修复:防止菜单在打开时更新
  • [#13162] 修复:托盘图标边界不允许负值
  • [#13085] 修复:高亮显示时托盘标题不反转
  • [#12196] 修复:当 enable_run_as_node==false 时的 Mac 构建
  • [#12157] 修复:具有 vibrancy 的无边框窗口上的其他问题
  • [#13326] 修复:在调用 app.removeAsDefaultProtocolClient 后将 mac 协议设置为 none
  • [#13530] 修复:MAS 构建中不正确地使用私有 API
  • [#13517] 修复:tray.setContextMenu 崩溃
  • [#14205] 修复:现在即使设置了 defaultId,在对话框上按 escape 也会关闭它

Linux

  • [#12507] 修复:用于离屏窗口的 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 的重大更新。 补丁版本应该更稳定,因为它们将只包含高优先级的 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
  • 添加 affinity 选项,用于将多个 BrowserWindows 聚集到一个进程中。 #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.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 现在设置 user-agent 缩放约束 #12510
  • 为 webview 选项设置适当的默认值。 #12292
  • 改进了 vibrancy 支持。 #12157 #12171 #11886
  • 修复了单例 fixture 中的定时问题。
  • 修复了 NotifierSupportsActions() 中损坏的生产缓存
  • 使 MenuItem 角色与 camelCase 兼容。 #11532
  • 改进了触摸栏更新。 #11812, #11761.
  • 删除了额外的菜单分隔符。 #11827
  • 修复了 Bluetooth 选择器 bug。 关闭 #11399.
  • 修复了 macos 全屏切换菜单项标签。 #11633
  • 改进了窗口停用时工具提示的隐藏。 #11644
  • 迁移了已弃用的 web-view 方法。 #11798
  • 修复了从 browserview 打开的窗口的关闭。 #11799
  • 修复了 Bluetooth 选择器 bug。 #11492
  • 更新为使用任务计划程序来调用 app.getFileIcon API。 #11595
  • 更改为即使在离屏渲染时也触发 console-message 事件。 #11921
  • 修复了使用 WebContents.downloadURL 从自定义协议下载的问题。 #11804
  • 修复了 devtools 分离时透明窗口失去透明度的问题。 #11956
  • 修复了 Electron 应用程序取消重启或关机的问题。 #11625

macOS

  • 修复了重复使用触控栏项目时的事件泄漏。 #12624
  • 修复了 darkmode 中的托盘高亮显示。 #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!