跳到主要内容

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 使用 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(这是默认值)。如果此挂钩不存在,则本机模块将无法在 Windows 上加载,并显示类似 Cannot find module 的错误消息。参见本机模块指南以获取更多信息。

弃用

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

禁用为 nativeWindowOpen-ed 窗口的 Node.js 集成

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

webPreferences 默认值

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

属性已弃用的默认值新默认值
contextIsolationfalsetrue
nodeIntegrationtruefalse
webviewTagnodeIntegration 的值(如果已设置),否则为 truefalse

请注意:目前存在已知错误 (#9736),如果 contextIsolation 处于启用状态,则会阻止 webview 标签正常工作。请密切关注 GitHub 问题以获取最新信息!

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

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

webContents.findInPage(text[, options])

由于 medialCapitalAsWordStartwordStart 选项已在上游删除,因此已被弃用。

应用反馈计划

我们在 Electron 3.0 的开发过程中制定的应用反馈计划是成功的,因此我们在 4.0 的开发过程中也继续使用它。我们要向 Atlassian、Discord、MS Teams、OpenFin、Slack、Symphony、WhatsApp 以及其他计划成员在 4.0 beta 周期中的参与表示衷心的感谢。要了解有关应用反馈计划的更多信息并参与未来的 beta 版本,请查看我们有关该计划的博客文章

下一步是什么

在短期内,您可以期望团队继续专注于跟上构成 Electron 的主要组件(包括 Chromium、Node 和 V8)的开发。尽管我们谨慎地不承诺有关发布日期的承诺,但我们的计划是大约每季度发布具有这些组件新版本的新主要 Electron 版本。参见我们的版本控制文档以获取有关 Electron 中版本控制的更多详细信息。

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

SQLite 漏洞修复

·一分钟阅读

已发现远程代码执行漏洞 "Magellan",该漏洞会影响基于 SQLite 或 Chromium 的软件,包括所有版本的 Electron。


范围

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

缓解措施

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

我们已经发布了包含此漏洞修复程序的新 Electron 版本

没有关于在野外发现此漏洞的报告;但是,敦促受影响的应用程序进行缓解。

更多信息

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

要了解有关保持 Electron 应用程序安全的最佳实践的更多信息,请参见我们的安全教程

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

Electron 应用反馈计划

·3 分钟阅读

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

编辑 (2020-05-21):此计划已停用。


谁可以加入?

我们加入此计划的应用程序的标准和期望包括以下项目

  • 在 beta 期间测试您的应用程序超过 10,000 个用户时
  • 拥有一个单独的负责人,他将每周签到以讨论您的应用程序的 Electron 错误和应用程序阻止程序
  • 您同意遵守 Electron 的行为准则
  • 您愿意分享下一个问题中列出的以下信息

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

  • 您的应用在任何 Beta 版本中运行的总用户时长
  • 您的应用正在测试的 Electron 版本(例如,4.0.0-beta.3)
  • 任何阻止您的应用升级到正在进行 Beta 测试的发行线的 Bug

用户时长

我们理解并非每个人都能分享确切的用户数量,但是更好的数据有助于我们决定特定版本的稳定性。我们要求应用承诺在 Beta 周期内测试至少 10,000 用户时长。

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

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

您应用的 Bug 将被追踪,并被核心 Electron 团队关注。您的反馈有助于 Electron 团队了解新 Beta 版本的运行情况以及需要完成的工作。

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

不会,您应用的信息不会与公众分享。信息保存在一个私有的 GitHub 仓库中,只有应用反馈计划和Electron Governance的成员才能查看。所有成员都同意遵守 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: 节点 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: 需要 Node v4.x 或更高版本才能使用 electron npm 模块
  • [#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: 立即通知焦点更改,而不是在下一个滴答中通知

MacOS

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

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 编写的,GYP 是“Generate Your Projects”的缩写。

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

Electron 在历史上一直保持主 Electron 代码libchromiumcontent 之间的分离,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 的支持,并切换到使用 Clang 在 Windows 上进行构建。使用 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 版本,则可以通过在所有 webContentsnew-window 事件上 blanket-calling 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,它是注册表中专门为与 Electron 一起使用而构建的 3400 多个模块的集合。

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 上的相应存储库中提交问题

感谢

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

国际化更新

·3 分钟阅读

自从新的国际化 Electron 网站发布以来,我们一直在努力使讲英语国家以外的开发者更容易获得 Electron 开发体验。

所以我们现在带来了一些令人兴奋的 i18n 更新!


🌐 语言切换

您是否知道许多阅读翻译文档的人经常与原始英文文档交叉引用? 他们这样做是为了熟悉英文文档,并避免过时或不准确的翻译,这是国际化文档的一个缺点。

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 的国际化工作

由于 Electron 的 i18n 计划的成功,Node.js 决定以我们使用的模式为模型对其改进的 i18n 工作! 🎉 Node.js i18n 计划现已启动并获得了巨大的发展势头,但您仍然可以阅读有关早期提案及其背后原因的信息 here.

🔦 贡献指南

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

Electron 2.0.0

·7 分钟阅读

经过四个多月的开发,八个 beta 版本,以及来自许多应用程序分阶段推出的全球测试,Electron 2.0.0 版本现在可从 electronjs.org 获得。


发布流程

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

Electron 2.0.0 还代表了 Electron 在主要版本发布之前如何稳定方面的改进。 几个大型 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
  • 新的 API app.setLocale()。#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.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
  • 改进了鲜艳度支持。#12157 #12171 #11886
  • 修复了单例装置中的时序问题。
  • 修复了 NotifierSupportsActions() 中损坏的生产缓存
  • 使 MenuItem 角色与 camelCase 兼容。#11532
  • 改进了触摸栏更新。#11812, #11761.
  • 删除了额外的菜单分隔符。#11827
  • 修复了蓝牙选择器错误。 关闭 #11399
  • 修复了 macos 全屏切换菜单项标签。#11633
  • 改进了窗口停用时工具提示隐藏。#11644
  • 迁移了已弃用的 web-view 方法。#11798
  • 修复了从 browserview 打开的窗口的关闭。#11799
  • 修复了蓝牙选择器错误。#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 即将推出!