跳转到主要内容

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` 从 npm 安装。本次发布包含了大量的升级、修复和新功能,我们迫不及待地想看到您将用它们构建出什么。请继续阅读以了解本次发布的详细信息,并在探索过程中分享您的任何反馈!


有什么新内容?

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 实例 作为第二个参数传递,模块名称作为第三个参数传递。相同的事件也会在 `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(这是默认值)。如果缺少此钩子,原生模块将在 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

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

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

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

webContents.findInPage(text[, options])

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

应用反馈计划

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

SQLite 漏洞修复

·一分钟阅读

发现了一个影响基于 SQLite 或 Chromium 的软件(包括所有版本的 Electron)的远程代码执行漏洞,名为 "Magellan"。


范围

使用 Web SQL 的 Electron 应用程序受到影响。

缓解措施

受影响的应用程序应停止使用 Web SQL 或升级到已修补的 Electron 版本。

我们已发布新版本的 Electron,其中包含此漏洞的修复程序。

目前尚无野外报告;但是,强烈建议受影响的应用程序进行缓解。

进一步信息

该漏洞由腾讯 Blade 团队发现,该团队已发布一篇讨论该漏洞的博客文章

要了解有关保护您的 Electron 应用安全的最佳实践,请参阅我们的安全教程

如果您希望报告 Electron 的漏洞,请发送电子邮件至 security@electronjs.org

Electron 应用反馈计划

·3 分钟阅读

Electron 正在努力使其发布周期更快、更稳定。为了实现这一点,我们启动了 App Feedback Program,供大型 Electron 应用测试我们的 beta 版本并向我们报告特定于应用程序的问题。这有助于我们确定工作的优先级,以便更快地将应用程序升级到我们的下一个稳定版本。

编辑 (2020-05-21): 该计划已退休。


谁可以加入?

我们对加入该计划的应用程序的标准和期望包括以下几项:

  • 在 10,000 多个用户小时的 beta 期间测试您的应用程序
  • 指定一个联络人,每周与我们联系,讨论您的应用程序的 Electron 错误和阻碍升级的问题
  • 您同意遵守 Electron 的 行为准则
  • 您愿意分享以下问题的相关信息

我的 Electron 应用需要共享哪些信息?

  • 您的应用程序使用任何 beta 版本运行的总用户小时数
  • 您的应用程序正在测试的 Electron 版本(例如,4.0.0-beta.3)
  • 任何阻止您的应用程序升级到正在 beta 测试的版本线的错误

用户小时数

我们理解并非所有人都能够分享确切的用户数量,但更好的数据有助于我们判断特定版本的稳定性。我们要求应用程序承诺在 beta 周期内至少测试 10,000 个用户小时。

  • 10 用户小时可以是 10 个人测试一小时,或者一个人测试 10 小时
  • 您可以将测试时间分配给不同的 beta 版本,例如,在 3.0.0-beta.2 上测试 5,000 用户小时,然后在 3.0.0-beta.5 上测试 5,000 用户小时。测试越多越好,但我们理解有些应用程序无法测试每个 beta 版本。
  • CI 或 QA 小时不计入总数;但是,内部版本是计入的。

我的 Electron 应用为什么要加入?

您应用程序的错误将被跟踪,并会得到核心 Electron 团队的关注。您的反馈有助于 Electron 团队了解新 beta 版本的表现以及需要完成的工作。

我的应用程序信息会被公开分享吗?谁能看到这些信息?

不,您的应用程序信息不会与公众分享。这些信息保存在一个私有的 GitHub 仓库中,只有 App Feedback Program 和 Electron Governance 的成员才能查看。所有成员都同意遵守 Electron 的 行为准则

注册

我们目前只接受有限数量的报名。如果您有兴趣并能够满足上述要求,请填写此 表格

Electron 3.0.0

·6 分钟阅读

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] 重构: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 的开发节奏保持一致。

使用 GN 构建 Electron

·3 分钟阅读

Electron 现在使用 GN 进行构建。这里讨论了原因。


GYP 和 GN

Electron 最初发布于 2013 年,当时 Chromium 的构建配置是用 GYP 编写的,它是“Generate Your Projects”的缩写。

2014 年,Chromium 项目引入了一个名为 GN("Generate Ninja" 的缩写)的新构建配置工具。Chromium 的构建文件已迁移到 GN,并从源代码中移除了 GYP。

Electron 历来一直将主 Electron 代码与 `libchromiumcontent`(Electron 中包装 Chromium 'content' 子模块的部分)分开。Electron 一直沿用 GYP,而 `libchromiumcontent`——作为 Chromium 的一个子集——在 Chromium 切换到 GN 时也切换了。

就像不完全啮合的齿轮一样,这两个构建系统之间存在摩擦。保持兼容性容易出错,因为需要在 Chromium、Node、V8 和 Electron 之间仔细同步编译器标志和 `#defines`。

为了解决这个问题,Electron 团队一直在努力将所有内容都迁移到 GN。今天,从 Electron 中移除最后一个 GYP 代码的 提交 已合并到 master 分支。

这对您意味着什么

如果您为 Electron 本身做贡献,从 `master` 或 4.0.0 检出和构建 Electron 的过程与 3.0.0 及更早版本有很大不同。有关详细信息,请参阅 GN 构建说明

如果您正在开发使用 Electron 的应用程序,那么在新版 Electron 4.0.0-nightly 中可能会注意到一些小的更改;但更有可能的是,Electron 构建系统的更改对您来说将是完全透明的。

这对 Electron 意味着什么

GN 比 GYP 更快,并且其文件更易读、更易维护。此外,我们希望使用单一的构建配置系统可以减少将 Electron 升级到新版本 Chromium 所需的工作量。

  • 它已经极大地帮助了 Electron 4.0.0 的开发,因为 Chromium 67 移除了对 MSVC 的支持,并在 Windows 上切换到使用 Clang 进行构建。通过 GN 构建,我们直接继承了 Chromium 的所有编译器命令,因此我们在 Windows 上免费获得了 Clang 构建!

  • 它还使 Electron 更容易在 Electron、Chromium 和 Node 之间统一构建使用 BoringSSL——这以前是一个有问题的过程

WebPreferences 漏洞修复

·3 分钟阅读

发现了一个远程代码执行漏洞,影响了在 Electron 版本(3.0.0-beta.6、2.0.7、1.8.7 和 1.7.15)中具有打开嵌套子窗口能力的应用程序。此漏洞被分配了 CVE 标识符 CVE-2018-15685


受影响的平台

如果您满足以下条件,则会受到影响:

  1. 您嵌入了任何远程用户内容,即使是在沙盒环境中
  2. 您接受任何带有 XSS 漏洞的用户输入

详细信息

如果您允许任何用户代码在 iframe 中运行 / 能够创建 iframe,则会受到影响。鉴于存在 XSS 漏洞的可能性,可以假定大多数应用程序都容易受到这种情况的影响。

如果您使用 nativeWindowOpen: truesandbox: true 选项打开任何窗口,您也会受到影响。尽管此漏洞还需要您的应用程序存在 XSS 漏洞,但如果您使用其中任何一个选项,仍应采取以下一种缓解措施。

缓解措施

我们已发布 Electron 的新版本,其中包含此漏洞的修复程序:3.0.0-beta.72.0.81.8.81.7.16。我们敦促所有 Electron 开发人员立即将其应用程序更新到最新的稳定版本。

如果由于某种原因您无法升级您的 Electron 版本,您可以通过为所有 `webContents` 的 `new-window` 事件调用 `event.preventDefault()` 来保护您的应用程序。如果您根本不使用 `window.open` 或任何子窗口,这对您的应用程序也是一种有效的缓解措施。

mainWindow.webContents.on('new-window', (e) => e.preventDefault());

如果您依赖子窗口创建孙窗口的能力,那么第三种缓解策略是使用以下代码处理您的顶级窗口:

const enforceInheritance = (topWebContents) => {
const handle = (webContents) => {
webContents.on(
'new-window',
(event, url, frameName, disposition, options) => {
if (!options.webPreferences) {
options.webPreferences = {};
}
Object.assign(
options.webPreferences,
topWebContents.getLastWebPreferences(),
);
if (options.webContents) {
handle(options.webContents);
}
},
);
};
handle(topWebContents);
};

enforceInheritance(mainWindow.webContents);

此代码将手动强制将顶级窗口的 webPreferences 应用于所有深度嵌套的子窗口。

进一步信息

此漏洞由 Contrast SecurityMatt Austin 负责任地发现并报告给 Electron 项目。

要了解有关保护您的 Electron 应用安全的最佳实践,请参阅我们的安全教程

如果您希望报告 Electron 的漏洞,请发送电子邮件至 security@electronjs.org

搜索

·6 分钟阅读

Electron 网站新增了一个搜索引擎,可以即时搜索 API 文档、教程、Electron 相关 npm 包等内容。

Electron Search Screenshot


学习 Electron 这样一项新技术或框架可能会让人望而生畏。一旦您度过了 快速入门阶段,就很难学习最佳实践、找到正确的 API,或者发现能帮助您构建梦想应用程序的工具。我们希望 Electron 网站能成为一个更好的工具,用于查找您所需资源,以便更快、更轻松地构建应用程序。

访问 electronjs.org 上的任何页面,你都会在页面顶部找到新的搜索输入框。

搜索引擎

当我们开始为网站添加搜索功能时,我们使用 GraphQL 作为后端,自己构建了一个搜索引擎。GraphQL 很有趣,搜索引擎也很高效,但我们很快意识到构建搜索引擎并非易事。诸如多词搜索和拼写错误检测之类的事情需要大量工作才能做到尽善尽美。与其重新发明轮子,我们决定使用现有的搜索解决方案:Algolia

Algolia 是一项托管搜索服务,已迅速成为 React、Vue、Bootstrap、Yarn 以及许多其他流行开源项目的首选搜索引擎。

以下是 Algolia 成为 Electron 项目理想选择的一些功能:

  • InstantSearch.js 可在输入时提供结果,通常只需 1 毫秒。
  • 拼写容错意味着即使您输入了 widnow 也能获得结果。
  • 高级查询语法 支持 “精确匹配”-排除
  • API 客户端是开源的,并且文档齐全。
  • 分析告诉我们人们最常搜索的内容,以及他们搜索但找不到的内容。这将为我们提供宝贵的见解,了解如何改进 Electron 的文档。
  • Algolia 对开源项目是免费的

API 文档

有时您知道完成什么,但不确定如何去做。Electron 拥有超过 750 个 API 方法、事件和属性。没有人能轻易记住所有这些,但计算机很擅长处理这些事情。利用 Electron 的 JSON API 文档,我们将所有这些数据索引到 Algolia 中,现在您可以轻松找到您正在寻找的确切 API。

尝试调整窗口大小?搜索 resize,直接找到你需要的方法。

教程

Electron 拥有不断增长的教程集,以补充其 API 文档。现在,你可以更轻松地找到关于特定主题的教程,并与相关的 API 文档放在一起。

寻找安全最佳实践?搜索 security

npm 包

npm 注册表中现在有超过 700,000 个包,找到您需要的包并不总是那么容易。为了更容易发现这些模块,我们创建了 electron-npm-packages,这是一个包含注册表中 3400 多个专门为 Electron 使用而构建的模块的集合。

来自 Libraries.io 的工作人员创建了 SourceRank,这是一个基于代码、社区、文档和使用率等指标组合对软件项目进行评分的系统。我们创建了一个 `sourceranks` 模块,其中包含 npm 注册表中每个模块的分数,我们使用这些分数对包结果进行排序。

想要 Electron 内置 IPC 模块的替代品?搜索 is:package ipc

Electron 应用

使用 Algolia 索引数据非常容易,因此我们添加了来自 electron/apps 的现有应用程序列表。

试试搜索 musichomebrew

过滤结果

如果您以前使用过 GitHub 的 代码搜索,您可能知道它像 extension:jsuser:defunkt 这样的冒号分隔键值过滤器。我们认为这种过滤技术非常强大,因此我们在 Electron 的搜索中添加了一个 is: 关键字,允许您将结果过滤为仅显示一种类型。

键盘导航

人们喜欢键盘快捷键!新的搜索功能可以在不将手指离开键盘的情况下使用。

  • / 聚焦搜索输入框
  • esc 聚焦搜索输入框并清除它
  • down 移动到下一个结果
  • up 移动到上一个结果,或搜索输入框
  • enter 打开一个结果

我们还开源了支持这种键盘交互的 模块。它设计用于 Algolia InstantSearch,但已通用化,以便与不同的搜索实现兼容。

我们想要你的反馈

如果你在使用新的搜索工具时遇到任何问题,我们希望听到你的声音!

提交反馈的最佳方式是在相应的存储库中向 GitHub 提交 issue。

致谢

特别感谢 Emily JordanVanessa Yuen 构建了这些新的搜索功能,感谢 Libraries.io 提供 SourceRank 分数,并感谢 Algolia 团队帮助我们入门。🍹

国际化更新

·3 分钟阅读

自新的国际化 Electron 网站启动以来,我们一直致力于让英语以外的开发者也能更轻松地体验 Electron 开发。

因此,我们带来了令人兴奋的国际化更新!


🌐 语言切换

您知道吗?许多阅读翻译文档的人经常会将其与原始英文文档进行交叉引用。他们这样做是为了熟悉英文文档,并避免过时或不准确的翻译,这是国际化文档的一个注意事项。

Language toggle on Electron documentation

为了更轻松地与英文文档进行交叉引用,我们最近推出了一项功能,允许您在英语和您正在浏览网站的任何语言之间无缝切换 Electron 文档的某个部分。只要您在网站上选择了非英语区域设置,语言切换器就会显示出来。

⚡️ 快速访问翻译页面

New Electron documentation footer in Japanese

在阅读文档时发现拼写错误或翻译不准确?您不再需要登录 Crowdin,选择您的区域设置,找到您想修改的文件,等等。现在,您只需滚动到该文档的底部,然后点击“翻译本文档”(或您所在语言的相应选项)。瞧!您将被直接带到 Crowdin 翻译页面。现在就开始您的翻译吧!

📈 一些统计数据

自从我们公布 Electron 文档的国际化 (i18n) 工作以来,我们看到了来自世界各地 Electron 社区成员的翻译贡献巨大增长。到目前为止,我们已经完成了1,719,029 个字符串的翻译,来自 1,066 名社区翻译者,支持 25 种语言

Translation Forecast provided by Crowdin

这是一张有趣的图表,显示了以当前(截至撰写时过去 14 天的项目活动量)的翻译速度,将项目翻译成每种语言所需的近似时间。

📃 翻译者调查

我们要衷心感谢每一位为改进 Electron 付出时间的贡献者!为了充分认可我们翻译社区的辛勤工作,我们创建了一个调查来收集一些信息(即他们的 Crowdin 和 Github 用户名映射)。

如果您是我们了不起的翻译人员之一,请花几分钟时间填写此表:https://goo.gl/forms/b46sjdcHmlpV0GKT2

🙌 Node.js 的国际化工作

由于 Electron 的国际化倡议取得了成功,Node.js 决定以我们使用的模式为其改造的国际化工作建模!🎉 Node.js 国际化倡议现已启动并获得了巨大的动力,但您仍可在此处阅读有关早期提案及其背后的原因

🔦 贡献指南

如果您有兴趣加入我们让 Electron 更具国际友好的努力,我们有一个方便的贡献指南来帮助您入门。国际化愉快!📚

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!