跳至主要内容

国际化更新

·阅读时间:3 分钟

自从推出新的国际化 Electron 网站以来,我们一直在努力使 Electron 开发体验更容易为非英语国家/地区的开发人员所用。

因此,我们带来了一些令人兴奋的 i18n 更新!


🌐 语言切换

您是否知道许多阅读翻译文档的人经常会将其与原始英文文档交叉参考?他们这样做是为了熟悉英文文档,并避免过时或不准确的翻译,这是国际化文档的一个需要注意的地方。

Language toggle on Electron documentation

为了更轻松地交叉参考英文文档,我们最近推出了一项功能,允许您在 Electron 文档的某个部分之间无缝切换英语和您正在查看网站的任何语言。只要您在网站上选择了非英语语言环境,语言切换就会显示出来。

⚡️ 快速访问翻译页面

New Electron documentation footer in Japanese

在阅读文档时发现错别字或错误的翻译?您不再需要登录 Crowdin,选择您的语言环境,找到您想要修复的文件等等。相反,您只需向下滚动到该文档的底部,然后点击“翻译此文档”(或您语言中的等效内容)。瞧!您将直接进入 Crowdin 翻译页面。现在施展您的翻译魔法吧!

📈 一些统计数据

自从我们公布了 Electron 文档国际化工作以来,我们看到来自世界各地 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 计划现已启动并获得了巨大发展势头,但您仍然可以在此处阅读有关早期提案和背后的原因。

🔦 贡献指南

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

Electron 2.0.0

·阅读时间:5 分钟

经过四个多月的开发、八个 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 选项,用于将多个 BrowserWindows 收集到单个进程中。 #11501
  • 添加 saveDialog 列出可用扩展名的功能。 #11873
  • 支持额外的通知操作 #11647
  • 能够设置 macOS 通知关闭按钮标题。 #11654
  • 为 menu.popup(window, callback) 添加条件。
  • Touch Bar 项的内存改进。 #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

错误修复

  • 更改以确保 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
  • 修复了单例夹具中的计时问题。
  • 修复了 NotifierSupportsActions() 中损坏的生产缓存。
  • 使 MenuItem 角色与驼峰命名法兼容。 #11532
  • 改进的触控栏更新。 #11812#11761
  • 删除了额外的菜单分隔符。 #11827
  • 修复了蓝牙选择器错误。关闭 #11399
  • 修复了 macOS 全屏切换菜单项标签。 #11633
  • 改进了窗口停用时工具提示隐藏。 #11644
  • 迁移了已弃用的 web-view 方法。 #11798
  • 修复了关闭从 browserview 打开的窗口的问题。 #11799
  • 修复了蓝牙选择器错误。 #11492
  • 更新为使用任务计划程序用于 app.getFileIcon API。 #11595
  • 更改为即使在渲染离屏时也触发 console-message 事件。 #11921
  • 修复了使用 WebContents.downloadURL 从自定义协议下载的问题。 #11804
  • 修复了透明窗口在 devtools 分离时丢失透明度的问题。 #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 即将发布!

更轻松地为开源应用进行自动更新

·阅读时间:3 分钟

今天,我们发布了一个免费的、开源的、托管的 更新 Web 服务 和配套的 npm 包,以便为开源 Electron 应用轻松实现自动更新。这是朝着赋予应用开发者权力迈出的一步,让他们可以减少对部署的关注,而更多地关注为用户开发高质量体验。


The new updater module in action

让生活更轻松

Electron 有一个 autoUpdater API,它使应用能够使用来自远程端点的元数据来检查更新、在后台下载更新以及自动安装更新。

对于许多 Electron 应用开发者来说,启用这些更新一直是部署过程中一个繁琐的步骤,因为它需要部署和维护一个 Web 服务器,仅仅是为了提供应用版本历史元数据。

今天,我们宣布了一种新的即用型自动应用更新解决方案。如果您的 Electron 应用位于公共 GitHub 存储库中,并且您正在使用 GitHub Releases 发布构建,则可以使用此服务向用户提供持续的应用更新。

使用新模块

为了最大程度地减少您的配置工作,我们创建了 update-electron-app,这是一个与新的 update.electronjs.org Web 服务集成的 npm 模块。

安装模块

npm install update-electron-app

从应用的 主进程 中的任何位置调用它

require('update-electron-app')();

就是这样!模块将在应用启动时检查更新,然后每十分钟检查一次。当发现更新时,它将在后台自动下载,并在更新准备就绪时显示一个对话框。

迁移现有应用

已经使用 Electron 的 autoUpdater API 的应用也可以使用此服务。为此,您可以自定义 update-electron-app 模块或直接与 update.electronjs.org 集成

替代方案

如果您正在使用electron-builder 打包您的应用,您可以使用其内置的更新程序。有关详细信息,请参阅electron.build/auto-update

如果您的应用是私有的,您可能需要运行您自己的更新服务器。为此,有一些开源工具,包括 Zeit 的Hazel 和 Atlassian 的Nucleus。有关更多信息,请参阅部署更新服务器 教程。

致谢

感谢Julian Gruber 帮助设计和构建此简单且可扩展的网络服务。感谢 Zeit 的团队提供其开源Hazel 服务,我们从中汲取了设计灵感。感谢Samuel Attard 进行代码审查。感谢 Electron 社区帮助测试此服务。

🌲 祝 Electron 应用拥有常青的未来!

Electron 2 中的新功能:应用内购买

·阅读时间:2分钟

新的 Electron 2.0 版本系列包含了新的功能和修复。此新主要版本中的亮点之一是用于 Apple 的Mac App Store 的新inAppPurchase API


应用内购买允许直接从应用内购买内容或订阅。这为开发人员提供了一种简单的方法来采用免费增值商业模式,用户无需支付任何费用即可下载应用,并可以选择应用内购买以获得高级功能、附加内容或订阅。

社区贡献者Adrien Fery 将此新 API 添加到 Electron 中,以便在Amanote(一款用于讲座和会议的 Electron 笔记应用)中启用应用内购买。Amanote 可免费下载,并允许将清晰且结构化的笔记添加到 PDF 中,并具有数学公式、绘图、音频录制等功能。

自为 Amanote 的 Mac 版本添加应用内购买支持以来,Adrien 发现销售额增长了 40%

入门

新的inAppPurchase API 已经包含在最新的 Electron 测试版中

npm i -D electron@beta

API 文档可以在GitHub 上找到,Adrien 还很乐意撰写了一个关于如何使用 API 的教程。要开始在您的应用中添加应用内购买,请参阅教程

更多对 API 的改进正在进行中,并将很快包含在即将发布的 Electron 测试版中。

Windows 可能即将到来

接下来,Adrien 希望通过在 Electron 中添加对 Microsoft Store 应用内购买的支持,为 Amanote 开辟新的收入渠道。敬请关注相关进展!

Webview 漏洞修复

·阅读时间:2分钟

已发现一个漏洞,该漏洞允许在某些禁用 Node.js 集成的 Electron 应用程序中重新启用 Node.js 集成。此漏洞已分配 CVE 标识符CVE-2018-1000136


受影响的应用程序

如果所有以下条件都为真,则应用程序会受到影响

  1. 运行在 Electron 1.7、1.8 或 2.0.0-beta 上
  2. 允许执行任意远程代码
  3. 禁用 Node.js 集成
  4. 在其 webPreferences 中未显式声明 webviewTag: false
  5. 未启用 nativeWindowOption 选项
  6. 未拦截 new-window 事件并手动覆盖 event.newGuest 且未使用提供的选项标签

尽管这似乎是少数 Electron 应用程序,但我们鼓励所有应用程序作为预防措施进行升级。

缓解措施

此漏洞已在今天的1.7.131.8.42.0.0-beta.5 版本中修复。

无法升级其应用程序 Electron 版本的开发人员可以使用以下代码来缓解此漏洞

app.on('web-contents-created', (event, win) => {
win.on(
'new-window',
(event, newURL, frameName, disposition, options, additionalFeatures) => {
if (!options.webPreferences) options.webPreferences = {};
options.webPreferences.nodeIntegration = false;
options.webPreferences.nodeIntegrationInWorker = false;
options.webPreferences.webviewTag = false;
delete options.webPreferences.preload;
}
);
});

// and *IF* you don't use WebViews at all,
// you might also want
app.on('web-contents-created', (event, win) => {
win.on('will-attach-webview', (event, webPreferences, params) => {
event.preventDefault();
});
});

更多信息

此漏洞由 Trustwave SpiderLabs 的 Brendan Scarvell 发现并负责任地报告给 Electron 项目。

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

要报告 Electron 中的漏洞,请发送电子邮件至[email protected]

请加入我们的电子邮件列表 以接收有关版本和安全更新的通知。

网站故障

·阅读时间:2分钟

上周electronjs.org 网站出现了几分钟的停机时间。如果您受到这些短暂中断的影响,我们对由此造成的不便表示歉意。经过今天的调查,我们已诊断出根本原因并已部署修复


为了防止将来发生此类停机,我们在应用上启用了Heroku 阈值警报。每当我们的 Web 服务器累积的失败请求或缓慢响应超过某个阈值时,我们的团队就会收到通知,以便我们能够快速解决问题。

所有语言的离线文档

下次您在飞机上或地下咖啡馆开发 Electron 应用时,您可能希望拥有文档副本以供离线参考。幸运的是,Electron 的文档以 Markdown 文件的形式提供,并提供 20 多种语言版本。

git clone https://github.com/electron/electron-i18n
ls electron-i18n/content

带有 GUI 的离线文档

devdocs.io/electron 是一个方便的网站,用于存储供离线使用的文档,不仅适用于 Electron,还适用于许多其他项目,如 JavaScript、TypeScript、Node.js、React、Angular 等。当然,也有一个 Electron 应用。请在 Electron 网站上查看devdocs-app

devdocs-app

如果您喜欢在不使用鼠标或触控板的情况下安装应用程序,请尝试使用Electron Forgeinstall 命令

npx electron-forge install egoist/devdocs-app

协议处理程序漏洞修复

·阅读时间:2分钟

已发现一个远程代码执行漏洞,该漏洞影响使用自定义协议处理程序的 Electron 应用。此漏洞已分配 CVE 标识符CVE-2018-1000006


受影响的平台

设计在 Windows 上运行并将其自身注册为协议(如 myapp://)的默认处理程序的 Electron 应用容易受到攻击。

此类应用可能会受到影响,无论协议是如何注册的,例如使用原生代码、Windows 注册表或 Electron 的app.setAsDefaultProtocolClient API。

macOS 和 Linux **不受**此问题影响。

缓解措施

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

如果由于某种原因您无法升级 Electron 版本,则可以在调用app.setAsDefaultProtocolClient 时将 -- 作为最后一个参数追加,这可以防止 Chromium 解析更多选项。双破折号 -- 表示命令选项的结束,之后仅接受位置参数。

app.setAsDefaultProtocolClient(protocol, process.execPath, [
'--your-switches-here',
'--',
]);

有关更多详细信息,请参阅app.setAsDefaultProtocolClient API。

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

如果您想报告 Electron 中的漏洞,请发送电子邮件至[email protected]

Electron 2.0 及其后续版本 - 语义版本控制

·阅读时间:1分钟

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


此更改意味着您将更频繁地看到主要版本号的增加,并且通常是 Chromium 的重大更新。修补程序版本也将更加稳定,因为它们现在将仅包含错误修复,不包含任何新功能。

主要版本递增

  • Chromium 版本更新
  • Node.js 主要版本更新
  • Electron 中断性 API 更改

次要版本递增

  • Node.js 次要版本更新
  • Electron 非中断性 API 更改

补丁版本递增

  • Node.js 补丁版本更新
  • 与修复相关的 Chromium 补丁
  • Electron 错误修复

由于 Electron 的 semver 范围现在更有意义,因此我们建议使用 npm 的默认 --save-dev 标志安装 Electron,这将在您的版本前加上 ^,让您安全地保持与次要和补丁更新同步

npm install --save-dev electron

对于仅对错误修复感兴趣的开发人员,您应该使用波浪号 semver 前缀,例如 ~2.0.0,它永远不会引入新功能,只会修复以提高稳定性。

有关更多详细信息,请参阅electronjs.org/docs/tutorial/electron-versioning

Electron 的全新国际化网站

·阅读需6分钟

Electron 拥有了一个新的网站 electronjs.org!我们用 Node.js web 服务器替换了静态的 Jekyll 网站,这使我们能够灵活地将网站国际化,并为更多令人兴奋的新功能铺平了道路。


🌍 翻译

我们已经开始将网站国际化的过程,目标是使全球开发人员都能访问 Electron 应用开发。我们使用一个名为 Crowdin 的本地化平台,该平台与 GitHub 集成,并在内容翻译成不同的语言时自动打开和更新拉取请求。

Electron Nav in Simplified Chinese

尽管我们迄今为止一直默默地开展这项工作,但已有超过 75 名 Electron 社区成员有机地发现了该项目,并加入了将网站国际化以及将 Electron 文档翻译成 20 多种语言的努力。我们看到了来自世界各地人们的 日常贡献,其中法语、越南语、印尼语和中文的翻译领先。

要选择您的语言并查看翻译进度,请访问 electronjs.org/languages

Translations in progress on Crowdin

如果您精通多种语言并且有兴趣帮助翻译 Electron 的文档和网站,请访问 electron/electron-i18n 仓库,或直接在 Crowdin 上进行翻译,您可以在其中使用您的 GitHub 帐户登录。

目前,Crowdin 上的 Electron 项目启用了 21 种语言。添加更多语言的支持非常简单,因此,如果您有兴趣帮助翻译但没有看到您的语言,请 告知我们,我们会启用它。

原始翻译文档

如果您更喜欢阅读原始 Markdown 文件中的文档,您现在可以使用任何语言。

git clone https://github.com/electron/electron-i18n
ls electron-i18n/content

应用页面

从今天开始,任何 Electron 应用都可以轻松地在 Electron 网站上拥有自己的页面。举几个例子,看看 Etcher1ClipboardGraphQL Playground,此处在该网站的日语版本中进行了展示。

GraphQL Playground

有一些很棒的 Electron 应用,但它们并不总是很容易找到,而且并非每个开发人员都有时间或资源来构建一个合适的网站来推广和分发他们的应用。

只需使用 PNG 图标文件和少量应用元数据,我们就可以收集有关给定应用的大量信息。使用从 GitHub 收集的数据,应用页面现在可以显示每个具有公共存储库的应用的屏幕截图、下载链接、版本、发行说明和自述文件。使用从每个应用的图标中提取的调色板,我们可以生成 醒目且易于访问的颜色,以使每个应用页面具有一定的视觉区分度。

现在,应用索引页面还具有类别和关键字过滤器,以查找有趣的应用,例如 GraphQL GUIP2P 工具

如果您有一个希望在网站上推荐的 Electron 应用,请在 electron/electron-apps 存储库中打开一个拉取请求。

使用 Homebrew 进行单行安装

macOS 的 Homebrew 包管理器有一个名为 cask 的子命令,它可以使用终端中的单个命令轻松安装桌面应用,例如 brew cask install atom

我们已经开始为流行的 Electron 应用收集 Homebrew cask 名称,并且现在在每个具有 cask 的应用页面上显示安装命令(适用于 macOS 访问者)。

Installation options tailored for your platform: macOS, Windows, Linux

要查看所有具有 homebrew cask 名称的应用,请访问 electronjs.org/apps?q=homebrew。如果您知道其他我们尚未编入索引的具有 cask 的应用,请 添加它们!

🌐 新域名

我们已将网站从 electron.atom.io 迁移到一个新域名:electronjs.org

Electron 项目诞生于 Atom,这是 GitHub 基于 Web 技术构建的开源文本编辑器。Electron 最初称为 atom-shell。Atom 是第一个使用它的应用,但很快人们就意识到这个神奇的 Chromium + Node 运行时可以用于各种不同的应用。当微软和 Slack 等公司开始使用 atom-shell 时,很明显该项目需要一个新名称。

于是“Electron”诞生了。2016 年初,GitHub 组建了一个新团队,专门专注于 Electron 的开发和维护,独立于 Atom。从那时起,Electron 已被数千名应用开发人员采用,并且现在受到许多大型公司的依赖,其中许多公司拥有自己的 Electron 团队。

支持 GitHub 的 Electron 项目(如 Atom 和 GitHub Desktop)仍然是我们团队的优先事项,但通过迁移到新域名,我们希望帮助澄清 Atom 和 Electron 之间的技术区别。

🐢🚀 Node.js 无处不在

以前的 Electron 网站是使用 Jekyll 构建的,Jekyll 是流行的基于 Ruby 的静态网站生成器。Jekyll 是构建静态网站的绝佳工具,但网站已经开始超出它的范围。我们想要更多动态功能,例如正确的重定向和动态内容呈现,因此 Node.js 服务器是显而易见的选择。

Electron 生态系统包括使用多种不同编程语言编写的组件的项目,从 Python 到 C++ 到 Bash。但 JavaScript 是 Electron 的基础,也是我们社区使用最多的语言。

通过将网站从 Ruby 迁移到 Node.js,我们的目标是降低希望为网站做出贡献的人的门槛。

⚡️ 更轻松的开源参与

如果您的系统上安装了 Node.js(8 或更高版本)和 git,则可以轻松地在本地运行该网站。

git clone https://github.com/electron/electronjs.org
cd electronjs.org
npm install
npm run dev

新网站托管在 Heroku 上。我们使用部署管道和 审查应用 功能,该功能会为每个拉取请求自动创建正在运行的应用副本。这使得审阅者可以轻松查看拉取请求对网站实时副本的实际影响。

🙏 感谢贡献者

我们要特别感谢世界各地所有贡献自己时间和精力帮助改进 Electron 的人。开源社区的热情极大地帮助 Electron 取得了成功。谢谢!

Thumbs up!

Chromium 远程代码执行漏洞修复

·阅读时间:1分钟

在 Google Chromium 中发现了一个远程代码执行漏洞,它会影响所有最近版本的 Electron。任何访问远程内容的 Electron 应用都容易受到此漏洞利用的影响,无论是否启用了 沙箱选项

我们发布了两个新版本的 electron 1.7.81.6.14,这两个版本都包含此漏洞的修复程序。我们敦促所有 Electron 开发人员立即将其应用更新到最新的稳定版本。

npm i electron@latest --save-dev

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

如果您想报告 Electron 中的漏洞,请联系 [email protected]