跳到主要内容

app

控制应用程序的事件生命周期。

进程: 主进程

以下示例展示了如何在最后一个窗口关闭时退出应用程序

const { app } = require('electron')
app.on('window-all-closed', () => {
app.quit()
})

事件

app 对象会触发以下事件

事件: 'will-finish-launching'

当应用程序完成基本启动时触发。在 Windows 和 Linux 上,will-finish-launching 事件与 ready 事件相同;在 macOS 上,此事件表示 NSApplicationapplicationWillFinishLaunching 通知。

在大多数情况下,你应该在 ready 事件处理程序中完成所有操作。

事件: 'ready'

返回值

Electron 初始化完成后,触发一次。在 macOS 上,如果应用程序是从通知中心启动的,则 launchInfo 保存用于打开应用程序的 NSUserNotificationuserInfo 或来自 UNNotificationResponse 的信息。你也可以调用 app.isReady() 来检查此事件是否已触发,并调用 app.whenReady() 来获取在 Electron 初始化时完成的 Promise。

注意: ready 事件仅在主进程完成事件循环的第一个 tick 后触发。如果需要在 ready 事件之前调用 Electron API,请确保在主进程的顶层上下文中同步调用它。

事件: 'window-all-closed'

当所有窗口都已关闭时触发。

如果你未订阅此事件且所有窗口都已关闭,则默认行为是退出应用程序;但是,如果你订阅了,则可以控制应用程序是否退出。如果用户按下 Cmd + Q,或者开发者调用了 app.quit(),Electron 将首先尝试关闭所有窗口,然后触发 will-quit 事件,在这种情况下,不会触发 window-all-closed 事件。

事件: 'before-quit'

返回值

  • event Event

在应用程序开始关闭其窗口之前触发。调用 event.preventDefault() 将阻止默认行为,即终止应用程序。

注意: 如果应用程序退出是由 autoUpdater.quitAndInstall() 发起的,则 before-quit 会在所有窗口上触发 close 事件并关闭它们之后触发。

注意: 在 Windows 上,如果应用程序由于系统关机/重启或用户注销而关闭,则不会触发此事件。

事件: 'will-quit'

返回值

  • event Event

当所有窗口都已关闭且应用程序将退出时触发。调用 event.preventDefault() 将阻止默认行为,即终止应用程序。

有关 will-quitwindow-all-closed 事件之间的差异,请参阅 window-all-closed 事件的描述。

注意: 在 Windows 上,如果应用程序由于系统关机/重启或用户注销而关闭,则不会触发此事件。

事件: 'quit'

返回值

  • event Event
  • exitCode 整数

当应用程序正在退出时触发。

注意: 在 Windows 上,如果应用程序由于系统关机/重启或用户注销而关闭,则不会触发此事件。

事件: 'open-file' macOS (macOS)

返回值

  • event Event
  • path 字符串

当用户想要使用应用程序打开文件时触发。当应用程序已打开且操作系统想要重用该应用程序打开文件时,通常会触发 open-file 事件。当文件被拖放到 Dock 上且应用程序尚未运行时,也会触发 open-file。请确保在应用程序启动初期监听 open-file 事件以处理这种情况(甚至在 ready 事件触发之前)。

如果你想处理此事件,则应调用 event.preventDefault()

在 Windows 上,你必须解析 process.argv(在主进程中)以获取文件路径。

事件: 'open-url' macOS (macOS)

返回值

  • event Event
  • url 字符串

当用户想要使用应用程序打开 URL 时触发。你的应用程序的 Info.plist 文件必须在 CFBundleURLTypes 键中定义 URL 方案,并将 NSPrincipalClass 设置为 AtomApplication

open-file 事件一样,请务必在应用程序启动初期注册 open-url 事件的侦听器,以检测应用程序是否正在打开以处理 URL。如果在响应 ready 事件时注册侦听器,你将错过触发应用程序启动的 URL。

事件: 'activate' macOS (macOS)

返回值

  • event Event
  • hasVisibleWindows 布尔值

当应用程序被激活时触发。各种操作可以触发此事件,例如首次启动应用程序、尝试重新启动已在运行的应用程序或单击应用程序的 Dock 或任务栏图标。

事件: 'did-become-active' macOS (macOS)

返回值

  • event Event

当应用程序变为活动状态时触发。这与 activate 事件的不同之处在于,did-become-active 每次应用程序变为活动状态时都会触发,而不仅仅是在单击 Dock 图标或重新启动应用程序时。当用户通过 macOS App Switcher 切换到应用程序时也会触发。

事件: 'did-resign-active' macOS (macOS)

返回值

  • event Event

当应用程序不再处于活动状态且没有焦点时触发。例如,单击另一个应用程序或使用 macOS App Switcher 切换到另一个应用程序可能会触发此事件。

事件: 'continue-activity' macOS (macOS)

返回值

  • event Event
  • type 字符串 - 标识活动的字符串。映射到 NSUserActivity.activityType
  • userInfo 未知 - 包含活动在另一台设备上存储的特定于应用程序的状态。
  • details 对象
    • webpageURL 字符串 (可选) - 一个字符串,用于标识另一台设备上活动访问的网页的 URL(如果可用)。

Handoff 期间,当来自不同设备的活动想要恢复时触发。如果你想处理此事件,则应调用 event.preventDefault()

只有在与活动的源应用程序具有相同的开发者 Team ID 并且支持活动类型的应用程序中,才能继续用户活动。受支持的活动类型在应用程序的 Info.plist 中的 NSUserActivityTypes 键下指定。

事件: 'will-continue-activity' macOS (macOS)

返回值

Handoff 期间,在来自不同设备的活动想要恢复之前触发。如果你想处理此事件,则应调用 event.preventDefault()

事件: 'continue-activity-error' macOS (macOS)

返回值

  • event Event
  • type 字符串 - 标识活动的字符串。映射到 NSUserActivity.activityType
  • error 字符串 - 包含错误本地化描述的字符串。

Handoff 期间,当来自不同设备的活动无法恢复时触发。

事件: 'activity-was-continued' macOS (macOS)

返回值

  • event Event
  • type 字符串 - 标识活动的字符串。映射到 NSUserActivity.activityType
  • userInfo 未知 - 包含活动存储的特定于应用程序的状态。

Handoff 期间,在此设备上的活动成功在另一设备上恢复后触发。

事件: 'update-activity-state' macOS (macOS)

返回值

  • event Event
  • type 字符串 - 标识活动的字符串。映射到 NSUserActivity.activityType
  • userInfo 未知 - 包含活动存储的特定于应用程序的状态。

Handoff 即将在另一设备上恢复时触发。如果需要更新要传输的状态,则应立即调用 event.preventDefault(),构造新的 userInfo 字典,并及时调用 app.updateCurrentActivity()。否则,操作将失败,并调用 continue-activity-error

事件: 'new-window-for-tab' macOS (macOS)

返回值

  • event Event

当用户单击原生 macOS 新建标签页按钮时触发。仅当当前 BrowserWindow 具有 tabbingIdentifier 时,新建标签页按钮才可见

事件: 'browser-window-blur'

返回值

browserWindow 失去焦点时触发。

事件: 'browser-window-focus'

返回值

browserWindow 获得焦点时触发。

事件: 'browser-window-created'

返回值

当新的 browserWindow 被创建时触发。

事件: 'web-contents-created'

返回值

当新的 webContents 被创建时触发。

事件: 'certificate-error'

返回值

  • event Event
  • webContents WebContents
  • url 字符串
  • error 字符串 - 错误代码
  • certificate Certificate
  • callback 函数
    • isTrusted 布尔值 - 是否将证书视为受信任
  • isMainFrame 布尔值

当无法验证 urlcertificate 时触发,要信任该证书,你应该使用 event.preventDefault() 阻止默认行为,并调用 callback(true)

const { app } = require('electron')

app.on('certificate-error', (event, webContents, url, error, certificate, callback) => {
if (url === 'https://github.com') {
// Verification logic.
event.preventDefault()
callback(true)
} else {
callback(false)
}
})

事件: 'select-client-certificate'

返回值

当请求客户端证书时触发。

url 对应于请求客户端证书的导航条目,可以调用 callback 并传入从列表中筛选出的条目。使用 event.preventDefault() 可阻止应用程序使用商店中的第一个证书。

const { app } = require('electron')

app.on('select-client-certificate', (event, webContents, url, list, callback) => {
event.preventDefault()
callback(list[0])
})

事件: 'login'

返回值

  • event Event
  • webContents WebContents (可选)
  • authenticationResponseDetails 对象
    • url URL
    • pid 数字
  • authInfo 对象
    • isProxy 布尔值
    • scheme 字符串
    • host 字符串
    • port 整数
    • realm 字符串
  • callback 函数
    • username 字符串 (可选)
    • password 字符串 (可选)

webContentsUtility process 想要执行基本身份验证时触发。

默认行为是取消所有身份验证。要覆盖此行为,你应该使用 event.preventDefault() 阻止默认行为,并使用凭据调用 callback(username, password)

const { app } = require('electron')

app.on('login', (event, webContents, details, authInfo, callback) => {
event.preventDefault()
callback('username', 'secret')
})

如果在没有用户名或密码的情况下调用 callback,则身份验证请求将被取消,并且身份验证错误将返回到页面。

事件: 'gpu-info-update'

每当 GPU 信息更新时触发。

事件: 'render-process-gone'

返回值

当渲染器进程意外消失时触发。这通常是因为它崩溃或被终止。

事件: 'child-process-gone'

返回值

  • event Event
  • details 对象
    • type 字符串 - 进程类型。以下值之一
      • Utility
      • Zygote
      • Sandbox helper
      • GPU
      • Pepper Plugin
      • Pepper Plugin Broker
      • Unknown
    • reason 字符串 - 子进程消失的原因。可能的值
      • clean-exit - 进程以零退出代码退出
      • abnormal-exit - 进程以非零退出代码退出
      • killed - 进程被发送 SIGTERM 或以其他方式在外部终止
      • crashed - 进程崩溃
      • oom - 进程内存不足
      • launch-failed - 进程从未成功启动
      • integrity-failure - Windows 代码完整性检查失败
    • exitCode 数字 - 进程的退出代码(例如,POSIX 上的 waitpid 中的状态,Windows 上的 GetExitCodeProcess 中的状态)。
    • serviceName 字符串 (可选) - 进程的非本地化名称。
    • name 字符串 (可选) - 进程的名称。实用程序示例:Audio ServiceContent Decryption Module ServiceNetwork ServiceVideo Capture 等。

当子进程意外消失时触发。这通常是因为它崩溃或被终止。它不包括渲染器进程。

事件: 'accessibility-support-changed' macOS (macOS) Windows (Windows)

返回值

  • event Event
  • accessibilitySupportEnabled 布尔值 - 当 Chrome 的辅助功能支持启用时为 true,否则为 false

当 Chrome 的辅助功能支持更改时触发。当辅助技术(如屏幕阅读器)启用或禁用时,会触发此事件。有关更多详细信息,请参阅 https://www.chromium.org/developers/design-documents/accessibility

事件: 'session-created'

返回值

当 Electron 创建新的 session 时触发。

const { app } = require('electron')

app.on('session-created', (session) => {
console.log(session)
})

事件: 'second-instance'

返回值

  • event Event
  • argv 字符串数组 - 第二个实例的命令行参数数组
  • workingDirectory 字符串 - 第二个实例的工作目录
  • additionalData 未知 - 从第二个实例传递的附加数据的 JSON 对象

当第二个实例已执行并调用 app.requestSingleInstanceLock() 时,此事件将在应用程序的主实例内部触发。

argv 是第二个实例的命令行参数数组,workingDirectory 是其当前工作目录。通常,应用程序通过使其主窗口聚焦且非最小化来响应此事件。

注意: argv 不会与传递给第二个实例的参数列表完全相同。顺序可能会更改,并且可能会附加其他参数。如果需要维护完全相同的参数,建议改用 additionalData

注意: 如果第二个实例由与第一个实例不同的用户启动,则 argv 数组将不包含参数。

保证此事件在 appready 事件触发后触发。

注意: Chromium 可能会添加额外的命令行参数,例如 --original-process-start-time

方法

app 对象具有以下方法

注意: 某些方法仅在特定操作系统上可用,并已标记。

app.quit()

尝试关闭所有窗口。将首先触发 before-quit 事件。如果所有窗口都成功关闭,将触发 will-quit 事件,默认情况下,应用程序将终止。

此方法保证所有 beforeunloadunload 事件处理程序都已正确执行。窗口可能会通过在 beforeunload 事件处理程序中返回 false 来取消退出。

app.exit([exitCode])

  • exitCode 整数 (可选)

立即使用 exitCode 退出。exitCode 默认为 0。

所有窗口都将立即关闭,而无需询问用户,并且不会触发 before-quitwill-quit 事件。

app.relaunch([options])

  • options 对象 (可选)
    • args 字符串数组 (可选)
    • execPath 字符串 (可选)

在当前实例退出时重新启动应用程序。

默认情况下,新实例将使用与当前实例相同的工作目录和命令行参数。当指定 args 时,args 将作为命令行参数传递。当指定 execPath 时,将执行 execPath 以进行重新启动,而不是当前应用程序。

请注意,此方法在执行时不会退出应用程序。你必须在调用 app.relaunch 后调用 app.quitapp.exit 才能使应用程序重新启动。

当多次调用 app.relaunch 时,当前实例退出后将启动多个实例。

立即重启当前实例并向新实例添加新的命令行参数的示例

const { app } = require('electron')

app.relaunch({ args: process.argv.slice(1).concat(['--relaunch']) })
app.exit(0)

app.isReady()

返回值 boolean - 如果 Electron 已完成初始化,则为 true,否则为 false。另请参阅 app.whenReady()

app.whenReady()

返回值 Promise<void> - 在 Electron 初始化时完成。如果应用程序尚未准备就绪,则可以用作检查 app.isReady() 和订阅 ready 事件的便捷替代方法。

app.focus([options])

  • options 对象 (可选)
    • steal 布尔值 macOS (macOS) - 使接收器成为活动应用程序,即使另一个应用程序当前处于活动状态。

在 Linux 上,聚焦于第一个可见窗口。在 macOS 上,使应用程序成为活动应用程序。在 Windows 上,聚焦于应用程序的第一个窗口。

你应该尽可能少地使用 steal 选项。

app.hide() macOS (macOS)

隐藏所有应用程序窗口,而不最小化它们。

app.isHidden() macOS (macOS)

返回值 boolean - 如果应用程序(包括其所有窗口)已隐藏(例如,使用 Command-H),则为 true,否则为 false

app.show() macOS (macOS)

在应用程序窗口隐藏后显示它们。不会自动聚焦它们。

app.setAppLogsPath([path])

  • path 字符串 (可选) - 日志的自定义路径。必须是绝对路径。

设置或创建应用程序日志的目录,然后可以使用 app.getPath()app.setPath(pathName, newPath) 对其进行操作。

调用不带 path 参数的 app.setAppLogsPath() 将导致此目录在 macOS (macOS) 上设置为 ~/Library/Logs/YourAppName,在 Linux (Linux)Windows (Windows) 上设置为 userData 目录内。

app.getAppPath()

返回值 string - 当前应用程序目录。

app.getPath(name)

  • name 字符串 - 你可以按名称请求以下路径
    • home 用户的 home 目录。
    • appData 每个用户的应用程序数据目录,默认情况下指向
      • Windows 上的 %APPDATA%
      • Linux 上的 $XDG_CONFIG_HOME~/.config
      • macOS 上的 ~/Library/Application Support
    • userData 用于存储应用程序配置文件目录,默认情况下是附加应用程序名称的 appData 目录。按照约定,存储用户数据的文件应写入此目录,并且不建议在此处写入大文件,因为某些环境可能会将此目录备份到云存储。
    • sessionData 用于存储 Session 生成的数据的目录,例如 localStorage、cookies、磁盘缓存、下载的字典、网络状态、devtools 文件。默认情况下,这指向 userData。Chromium 可能会在此处写入非常大的磁盘缓存,因此,如果你的应用程序不依赖于浏览器存储(如 localStorage 或 cookies)来保存用户数据,则建议将此目录设置为其他位置,以避免污染 userData 目录。
    • temp 临时目录。
    • exe 当前可执行文件。
    • module libchromiumcontent 库。
    • desktop 当前用户的桌面目录。
    • documents 用户“我的文档”目录。
    • downloads 用户的下载目录。
    • music 用户的音乐目录。
    • pictures 用户的图片目录。
    • videos 用户的视频目录。
    • recent 用户的最近文件目录(仅限 Windows)。
    • logs 应用程序日志文件夹目录。
    • crashDumps 存储崩溃转储的目录。

返回值 string - 与 name 关联的特殊目录或文件的路径。如果失败,则抛出 Error

如果调用 app.getPath('logs') 时未先调用 app.setAppLogsPath(),则将创建一个默认日志目录,等效于调用不带 path 参数的 app.setAppLogsPath()

app.getFileIcon(path[, options])

  • path 字符串
  • options 对象 (可选)
    • size 字符串
      • small - 16x16
      • normal - 32x32
      • large - 在 Linux (Linux) 上为 48x48,在 Windows (Windows) 上为 32x32,在 macOS (macOS) 上不受支持。

返回值 Promise<NativeImage> - 使用应用程序的图标完成,这是一个 NativeImage

获取路径的关联图标。

Windows (Windows) 上,有 2 种图标

  • 与某些文件扩展名关联的图标,如 .mp3.png 等。
  • 文件本身内部的图标,如 .exe.dll.ico

Linux (Linux)macOS (macOS) 上,图标取决于与文件 mime 类型关联的应用程序。

app.setPath(name, path)

  • name 字符串
  • path 字符串

覆盖与 name 关联的特殊目录或文件的 path。如果路径指定的目录不存在,则会抛出 Error 错误。在这种情况下,应使用 fs.mkdirSync 或类似方法创建目录。

您只能覆盖在 app.getPath 中定义的 name 的路径。

默认情况下,网页的 Cookie 和缓存将存储在 sessionData 目录中。如果您想更改此位置,则必须在 app 模块的 ready 事件发出之前覆盖 sessionData 路径。

app.getVersion()

返回 string - 已加载应用程序的版本。如果在应用程序的 package.json 文件中找不到版本,则返回当前捆绑包或可执行文件的版本。

app.getName()

返回 string - 当前应用程序的名称,即应用程序的 package.json 文件中的名称。

通常,根据 npm 模块规范,package.jsonname 字段是一个简短的小写名称。您通常还应该指定一个 productName 字段,它是您应用程序的完整首字母大写的名称,Electron 将优先于 name 使用它。

app.setName(name)

  • name 字符串

覆盖当前应用程序的名称。

注意: 此函数覆盖 Electron 内部使用的名称;它不影响操作系统使用的名称。

app.getLocale()

返回 string - 当前应用程序区域设置,使用 Chromium 的 l10n_util 库获取。可能的返回值记录在此处

要设置区域设置,您需要启动应用程序时使用命令行开关,可以在此处找到。

注意: 分发打包的应用程序时,您还必须附带 locales 文件夹。

注意: 此 API 必须在 ready 事件发出后调用。

注意: 要查看此 API 与其他区域设置和语言 API 相比的示例返回值,请参阅app.getPreferredSystemLanguages()

app.getLocaleCountryCode()

返回 string - 用户操作系统的区域设置双字母ISO 3166国家/地区代码。该值取自原生操作系统 API。

注意: 如果无法检测到区域设置国家/地区代码,则返回空字符串。

app.getSystemLocale()

返回 string - 当前系统区域设置。在 Windows 和 Linux 上,它使用 Chromium 的 i18n 库获取。在 macOS 上,改为使用 [NSLocale currentLocale]。要获取用户的当前系统语言(这并不总是与区域设置相同),最好使用app.getPreferredSystemLanguages()

不同的操作系统也以不同的方式使用区域数据

  • Windows 11 将区域格式用于数字、日期和时间。
  • macOS Monterey 使用区域来格式化数字、日期、时间,以及选择要使用的货币符号。

因此,此 API 可用于诸如在日历应用程序中选择用于渲染日期和时间的格式等目的,尤其是在开发人员希望格式与操作系统一致时。

注意: 此 API 必须在 ready 事件发出后调用。

注意: 要查看此 API 与其他区域设置和语言 API 相比的示例返回值,请参阅app.getPreferredSystemLanguages()

app.getPreferredSystemLanguages()

返回 string[] - 用户的首选系统语言,从最优先到最不优先,包括国家/地区代码(如果适用)。用户可以在 Windows 或 macOS 上通过“语言和区域”设置修改和添加到此列表。

该 API 在 Windows 上使用 GlobalizationPreferences(回退到 GetSystemPreferredUILanguages),在 macOS 上使用 \[NSLocale preferredLanguages\],在 Linux 上使用 g_get_language_names

此 API 可用于诸如决定以何种语言显示应用程序等目的。

以下是一些具有不同配置的各种语言和区域设置 API 的返回值示例

在 Windows 上,给定应用程序区域设置为德语,区域格式为芬兰语(芬兰),首选系统语言从最优先到最不优先分别是法语(加拿大)、英语(美国)、简体中文(中国)、芬兰语和西班牙语(拉丁美洲)

app.getLocale() // 'de'
app.getSystemLocale() // 'fi-FI'
app.getPreferredSystemLanguages() // ['fr-CA', 'en-US', 'zh-Hans-CN', 'fi', 'es-419']

在 macOS 上,给定应用程序区域设置为德语,区域为芬兰,首选系统语言从最优先到最不优先分别是法语(加拿大)、英语(美国)、简体中文和西班牙语(拉丁美洲)

app.getLocale() // 'de'
app.getSystemLocale() // 'fr-FI'
app.getPreferredSystemLanguages() // ['fr-CA', 'en-US', 'zh-Hans-FI', 'es-419']

可用的语言和地区以及可能的返回值在两个操作系统之间有所不同。

正如上面的示例所见,在 Windows 上,首选系统语言可能没有国家/地区代码,并且首选系统语言之一与用于区域格式的语言相对应。在 macOS 上,区域更像是默认国家/地区代码:用户不需要将芬兰语作为首选语言即可使用芬兰作为区域,并且国家/地区代码 FI 用作语言名称中没有关联国家的首选系统语言的国家/地区代码。

app.addRecentDocument(path) macOS Windows

  • path 字符串

path 添加到最近文档列表。

此列表由操作系统管理。在 Windows 上,您可以从任务栏访问该列表,而在 macOS 上,您可以从 Dock 菜单访问它。

app.clearRecentDocuments() macOS Windows

清除最近文档列表。

app.setAsDefaultProtocolClient(protocol[, path, args])

  • protocol string - 您的协议名称,不带 ://。例如,如果您希望您的应用程序处理 electron:// 链接,请使用 electron 作为参数调用此方法。
  • path string (可选) Windows - Electron 可执行文件的路径。默认为 process.execPath
  • args string[] (可选) Windows - 传递给可执行文件的参数。默认为空数组

返回 boolean - 调用是否成功。

将当前可执行文件设置为协议(又名 URI 方案)的默认处理程序。它允许您将您的应用程序更深入地集成到操作系统中。注册后,所有带有 your-protocol:// 的链接都将使用当前可执行文件打开。包括协议在内的整个链接将作为参数传递给您的应用程序。

注意: 在 macOS 上,您只能注册已添加到您的应用程序的 info.plist 中的协议,该文件在运行时无法修改。但是,您可以在构建时通过Electron ForgeElectron Packager 或使用文本编辑器编辑 info.plist 来更改该文件。请参阅Apple 的文档了解详细信息。

注意: 在 Windows 应用商店环境中(当打包为 appx 时),此 API 将对所有调用返回 true,但它设置的注册表项将无法被其他应用程序访问。为了将您的 Windows 应用商店应用程序注册为默认协议处理程序,您必须在您的清单中声明协议

该 API 在内部使用 Windows 注册表和 LSSetDefaultHandlerForURLScheme

app.removeAsDefaultProtocolClient(protocol[, path, args]) macOS Windows

  • protocol string - 您的协议名称,不带 ://
  • path string (可选) Windows - 默认为 process.execPath
  • args string[] (可选) Windows - 默认为空数组

返回 boolean - 调用是否成功。

此方法检查当前可执行文件是否为协议(又名 URI 方案)的默认处理程序。如果是,它将删除该应用程序作为默认处理程序。

app.isDefaultProtocolClient(protocol[, path, args])

  • protocol string - 您的协议名称,不带 ://
  • path string (可选) Windows - 默认为 process.execPath
  • args string[] (可选) Windows - 默认为空数组

返回 boolean - 当前可执行文件是否为协议(又名 URI 方案)的默认处理程序。

注意: 在 macOS 上,您可以使用此方法检查应用程序是否已注册为协议的默认协议处理程序。您还可以通过检查 macOS 机器上的 ~/Library/Preferences/com.apple.LaunchServices.plist 来验证这一点。请参阅Apple 的文档了解详细信息。

该 API 在内部使用 Windows 注册表和 LSCopyDefaultHandlerForURLScheme

app.getApplicationNameForProtocol(url)

  • url string - 带有要检查的协议名称的 URL。与此系列中的其他方法不同,此方法接受整个 URL,包括至少 ://(例如 https://)。

返回 string - 处理该协议的应用程序的名称,如果没有处理程序,则返回空字符串。例如,如果 Electron 是 URL 的默认处理程序,则在 Windows 和 Mac 上可能是 Electron。但是,不要依赖于不保证保持不变的精确格式。在 Linux 上,格式可能不同,可能带有 .desktop 后缀。

此方法返回 URL 的协议(又名 URI 方案)的默认处理程序的应用程序名称。

app.getApplicationInfoForProtocol(url) macOS Windows

  • url string - 带有要检查的协议名称的 URL。与此系列中的其他方法不同,此方法接受整个 URL,包括至少 ://(例如 https://)。

返回 Promise<Object> - 使用包含以下内容的对象解析 Promise

  • icon NativeImage - 处理该协议的应用程序的显示图标。
  • path string - 处理该协议的应用程序的安装路径。
  • name string - 处理该协议的应用程序的显示名称。

此方法返回一个 Promise,其中包含 URL 的协议(又名 URI 方案)的默认处理程序的应用程序名称、图标和路径。

app.setUserTasks(tasks) Windows

  • tasks Task[] - Task 对象数组

tasks 添加到 Windows 上的跳转列表的任务类别。

tasksTask 对象的数组。

返回 boolean - 调用是否成功。

注意: 如果您想更进一步自定义跳转列表,请改用 app.setJumpList(categories)

app.getJumpListSettings() Windows

返回 Object

  • minItems Integer - 将在跳转列表中显示的最小项目数(有关此值的更详细描述,请参阅MSDN 文档)。
  • removedItems JumpListItem[] - JumpListItem 对象数组,这些对象对应于用户已从跳转列表中的自定义类别中显式删除的项目。这些项目不得在下次调用 app.setJumpList() 时重新添加到跳转列表中,Windows 将不会显示包含任何已删除项目的任何自定义类别。

app.setJumpList(categories) Windows

返回 string

设置或删除应用程序的自定义跳转列表,并返回以下字符串之一

  • ok - 一切正常。
  • error - 发生了一个或多个错误,启用运行时日志记录以找出可能的原因。
  • invalidSeparatorError - 尝试将分隔符添加到跳转列表中的自定义类别。分隔符仅允许在标准 Tasks 类别中使用。
  • fileTypeRegistrationError - 尝试将文件链接添加到跳转列表,但该文件链接的文件类型应用程序未注册处理。
  • customCategoryAccessDeniedError - 由于用户隐私或组策略设置,无法将自定义类别添加到跳转列表中。

如果 categoriesnull,则先前设置的自定义跳转列表(如果有)将被应用程序的标准跳转列表(由 Windows 管理)替换。

注意: 如果 JumpListCategory 对象既未设置 type 属性,也未设置 name 属性,则其 type 假定为 tasks。如果设置了 name 属性,但省略了 type 属性,则 type 假定为 custom

注意: 用户可以从自定义类别中删除项目,并且 Windows 不允许在下次成功调用 app.setJumpList(categories) 之后之前将已删除的项目重新添加到自定义类别中。任何早于此尝试将已删除的项目重新添加到自定义类别的操作都将导致整个自定义类别从跳转列表中省略。可以使用 app.getJumpListSettings() 获取已删除项目的列表。

注意: 跳转列表项目的 description 属性的最大长度为 260 个字符。超出此限制,该项目将不会添加到跳转列表,也不会显示。

这是一个创建自定义跳转列表的非常简单的示例

const { app } = require('electron')

app.setJumpList([
{
type: 'custom',
name: 'Recent Projects',
items: [
{ type: 'file', path: 'C:\\Projects\\project1.proj' },
{ type: 'file', path: 'C:\\Projects\\project2.proj' }
]
},
{ // has a name so `type` is assumed to be "custom"
name: 'Tools',
items: [
{
type: 'task',
title: 'Tool A',
program: process.execPath,
args: '--run-tool-a',
iconPath: process.execPath,
iconIndex: 0,
description: 'Runs Tool A'
},
{
type: 'task',
title: 'Tool B',
program: process.execPath,
args: '--run-tool-b',
iconPath: process.execPath,
iconIndex: 0,
description: 'Runs Tool B'
}
]
},
{ type: 'frequent' },
{ // has no name and no type so `type` is assumed to be "tasks"
items: [
{
type: 'task',
title: 'New Project',
program: process.execPath,
args: '--new-project',
description: 'Create a new project.'
},
{ type: 'separator' },
{
type: 'task',
title: 'Recover Project',
program: process.execPath,
args: '--recover-project',
description: 'Recover Project'
}
]
}
])

app.requestSingleInstanceLock([additionalData])

  • additionalData Record<any, any> (可选) - 一个 JSON 对象,其中包含要发送到第一个实例的附加数据。

返回 boolean

此方法的返回值指示您的应用程序的此实例是否成功获取了锁。如果它未能获取锁,您可以假定您的应用程序的另一个实例已在持有锁的情况下运行,并立即退出。

即,如果您的进程是应用程序的主实例,并且您的应用程序应继续加载,则此方法返回 true。如果您的进程应立即退出,因为它已将其参数发送到已获取锁的另一个实例,则此方法返回 false

在 macOS 上,当用户尝试在 Finder 中打开应用程序的第二个实例时,系统会自动强制执行单实例,并且将为该实例发出 open-fileopen-url 事件。但是,当用户在命令行中启动您的应用程序时,系统的单实例机制将被绕过,您必须使用此方法来确保单实例。

当第二个实例启动时激活主实例窗口的示例

const { app, BrowserWindow } = require('electron')
let myWindow = null

const additionalData = { myKey: 'myValue' }
const gotTheLock = app.requestSingleInstanceLock(additionalData)

if (!gotTheLock) {
app.quit()
} else {
app.on('second-instance', (event, commandLine, workingDirectory, additionalData) => {
// Print out data received from the second instance.
console.log(additionalData)

// Someone tried to run a second instance, we should focus our window.
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore()
myWindow.focus()
}
})

app.whenReady().then(() => {
myWindow = new BrowserWindow({})
myWindow.loadURL('https://electron.js.cn')
})
}

app.hasSingleInstanceLock()

返回 boolean

此方法返回您的应用程序的此实例当前是否持有单实例锁。您可以使用 app.requestSingleInstanceLock() 请求锁,并使用 app.releaseSingleInstanceLock() 释放锁。

app.releaseSingleInstanceLock()

释放由 requestSingleInstanceLock 创建的所有锁。这将允许应用程序的多个实例再次并排运行。

app.setUserActivity(type, userInfo[, webpageURL]) macOS

  • type string - 唯一标识活动。映射到NSUserActivity.activityType
  • userInfo any - 要存储以供另一个设备使用的特定于应用程序的状态。
  • webpageURL string (可选) - 如果在恢复设备上未安装合适的应用程序,则要在浏览器中加载的网页。方案必须是 httphttps

创建一个 NSUserActivity 并将其设置为当前活动。该活动有资格在之后Handoff到另一个设备。

app.getCurrentActivityType() macOS

返回 string - 当前正在运行的活动的类型。

app.invalidateCurrentActivity() macOS

使当前的Handoff用户活动无效。

app.resignCurrentActivity() macOS

将当前的Handoff用户活动标记为不活动,但不使其无效。

app.updateCurrentActivity(type, userInfo) macOS

  • type string - 唯一标识活动。映射到NSUserActivity.activityType
  • userInfo any - 要存储以供另一个设备使用的特定于应用程序的状态。

如果当前活动的类型与 type 匹配,则更新当前活动,并将 userInfo 中的条目合并到其当前的 userInfo 字典中。

app.setAppUserModelId(id) Windows

  • id string

应用程序用户模型 ID 更改为 id

app.setActivationPolicy(policy) macOS

  • policy string - 可以是 'regular'、'accessory' 或 'prohibited'。

设置给定应用程序的激活策略。

激活策略类型

  • 'regular' - 应用程序是一个普通的应用程序,它显示在 Dock 中,并且可能具有用户界面。
  • 'accessory' - 应用程序不显示在 Dock 中,也没有菜单栏,但可以通过编程方式或单击其窗口之一来激活它。
  • 'prohibited' - 应用程序不显示在 Dock 中,并且可能无法创建窗口或被激活。

app.importCertificate(options, callback) Linux

  • options Object
    • certificate string - pkcs12 文件的路径。
    • password string - 证书的密码。
  • callback 函数
    • result Integer - 导入结果。

将 pkcs12 格式的证书导入到平台证书存储区。callback 使用导入操作的 result 调用,值 0 表示成功,而任何其他值表示失败,具体取决于 Chromium net_error_list

app.configureHostResolver(options)

  • options Object
    • enableBuiltInResolver boolean (可选) - 内置主机解析器是否优先于 getaddrinfo 使用。启用后,内置解析器将尝试使用系统的 DNS 设置自行执行 DNS 查找。默认情况下在 macOS 上启用,在 Windows 和 Linux 上默认禁用。
    • secureDnsMode string (可选) - 可以是 'off'、'automatic' 或 'secure'。配置 DNS-over-HTTP 模式。当为 'off' 时,将不执行 DoH 查找。当为 'automatic' 时,如果 DoH 可用,将首先执行 DoH 查找,并且不安全的 DNS 查找将作为回退执行。当为 'secure' 时,将仅执行 DoH 查找。默认为 'automatic'。
    • secureDnsServers string[] (可选) - DNS-over-HTTP 服务器模板列表。有关模板格式的详细信息,请参阅 RFC8484 § 3。大多数服务器支持 POST 方法;此类服务器的模板只是一个 URI。请注意,对于某些 DNS 提供商,除非显式禁用 DoH,否则即使此列表中未提供 DoH 服务器,解析器也会自动升级到 DoH。
    • enableAdditionalDnsQueryTypes boolean (可选) - 控制在使用不安全的 DNS 发出请求时,是否允许除传统的 A 和 AAAA 查询之外的其他 DNS 查询类型,例如 HTTPS(DNS 类型 65)。对始终允许其他类型的安全 DNS 没有影响。默认为 true。

配置主机解析(DNS 和 DNS-over-HTTPS)。默认情况下,将按以下顺序使用以下解析器

  1. DNS-over-HTTPS,如果DNS 提供商支持它,然后
  2. 内置解析器(默认情况下仅在 macOS 上启用),然后
  3. 系统解析器(例如 getaddrinfo)。

可以将其配置为限制非加密 DNS 的使用 (secureDnsMode: "secure"),或禁用 DNS-over-HTTPS (secureDnsMode: "off")。也可以启用或禁用内置解析器。

要禁用不安全的 DNS,您可以指定 secureDnsMode"secure"。如果您这样做,您应该确保提供要使用的 DNS-over-HTTPS 服务器列表,以防用户的 DNS 配置不包含支持 DoH 的提供商。

const { app } = require('electron')

app.whenReady().then(() => {
app.configureHostResolver({
secureDnsMode: 'secure',
secureDnsServers: [
'https://cloudflare-dns.com/dns-query'
]
})
})

此 API 必须在 ready 事件发出后调用。

app.disableHardwareAcceleration()

禁用当前应用程序的硬件加速。

此方法只能在应用程序准备就绪之前调用。

app.disableDomainBlockingFor3DAPIs()

默认情况下,如果 GPU 进程崩溃过于频繁,Chromium 会在每个域的基础上禁用 3D API(例如 WebGL),直到重新启动。此函数禁用该行为。

此方法只能在应用程序准备就绪之前调用。

app.getAppMetrics()

返回 ProcessMetric[]ProcessMetric 对象数组,这些对象对应于与应用程序关联的所有进程的内存和 CPU 使用率统计信息。

app.getGPUFeatureStatus()

返回 GPUFeatureStatus - 来自 chrome://gpu/ 的图形功能状态。

注意: 此信息仅在 gpu-info-update 事件发出后才可用。

app.getGPUInfo(infoType)

  • infoType string - 可以是 basiccomplete

返回 Promise<unknown>

对于 infoType 等于 complete:Promise 将被解析为一个 Object,其中包含所有 GPU 信息,如chromium 的 GPUInfo 对象中所述。这包括 chrome://gpu 页面上显示的 版本和驱动程序信息。

对于 infoType 等于 basic:Promise 将被解析为一个 Object,其中包含的属性比使用 complete 请求时少。以下是基本响应的示例

{
auxAttributes:
{
amdSwitchable: true,
canSupportThreadedTextureMailbox: false,
directComposition: false,
directRendering: true,
glResetNotificationStrategy: 0,
inProcessGpu: true,
initializationTime: 0,
jpegDecodeAcceleratorSupported: false,
optimus: false,
passthroughCmdDecoder: false,
sandboxed: false,
softwareRendering: false,
supportsOverlays: false,
videoDecodeAcceleratorFlags: 0
},
gpuDevice:
[{ active: true, deviceId: 26657, vendorId: 4098 },
{ active: false, deviceId: 3366, vendorId: 32902 }],
machineModelName: 'MacBookPro',
machineModelVersion: '11.5'
}

如果只需要像 vendorIddeviceId 这样的基本信息,则应优先使用 basic

app.setBadgeCount([count]) Linux macOS

  • count Integer (可选) - 如果提供值,则将徽章设置为提供的值,否则,在 macOS 上,显示一个纯白色点(例如,未知数量的通知)。在 Linux 上,如果未提供值,则徽章将不显示。

返回 boolean - 调用是否成功。

设置当前应用程序的计数器徽章。将计数设置为 0 将隐藏徽章。

在 macOS 上,它显示在 Dock 图标上。在 Linux 上,它仅适用于 Unity 启动器。

注意: Unity 启动器需要一个 .desktop 文件才能工作。有关更多信息,请阅读Unity 集成文档

注意: 在 macOS 上,您需要确保您的应用程序具有显示通知的权限才能使此方法工作。

app.getBadgeCount() Linux macOS

返回 Integer - 计数器徽章中显示的当前值。

app.isUnityRunning() Linux

返回 boolean - 当前桌面环境是否为 Unity 启动器。

app.getLoginItemSettings([options]) macOS Windows

  • options 对象 (可选)
    • type string (可选) macOS - 可以是 mainAppServiceagentServicedaemonServiceloginItemService 之一。默认为 mainAppService。仅在 macOS 13 及更高版本上可用。有关每种类型的更多信息,请参阅app.setLoginItemSettings
    • serviceName string (可选) macOS - 服务的名称。如果 type 为非默认值,则为必需。仅在 macOS 13 及更高版本上可用。
    • path string (可选) Windows - 要与之比较的可执行文件路径。默认为 process.execPath
    • args string[] (可选) Windows - 要与之比较的命令行参数。默认为空数组。

如果您为 app.setLoginItemSettings 提供了 pathargs 选项,那么您需要在此处传递相同的参数才能正确设置 openAtLogin

返回 Object

  • openAtLogin boolean - 如果应用程序设置为在登录时打开,则为 true
  • openAsHidden boolean macOS Deprecated - 如果应用程序设置为在登录时作为隐藏状态打开,则为 true。这在 macOS 13 及更高版本上不起作用。
  • wasOpenedAtLogin boolean macOS - 如果应用程序在登录时自动打开,则为 true
  • wasOpenedAsHidden boolean macOS Deprecated - 如果应用程序作为隐藏的登录项打开,则为 true。这表明应用程序不应在启动时打开任何窗口。此设置在 MAS 构建或 macOS 13 及更高版本上不可用。
  • restoreState boolean macOS Deprecated - 如果应用程序作为应从上一个会话恢复状态的登录项打开,则为 true。这表明应用程序应恢复上次应用程序关闭时打开的窗口。此设置在 MAS 构建或 macOS 13 及更高版本上不可用。
  • status string macOS - 可以是 not-registeredenabledrequires-approvalnot-found 之一。
  • executableWillLaunchAtLogin boolean Windows - 如果应用程序设置为在登录时启动且其运行键未被禁用,则为 true。 这与 openAtLogin 不同,因为它忽略了 args 选项,如果给定的可执行文件在登录时使用任何参数启动,则此属性将为 true。
  • launchItems Object[] Windows
    • name string Windows - 注册表项的名称值。
    • path string Windows - 与注册表项对应的应用程序的可执行文件路径。
    • args string[] Windows - 传递给可执行文件的命令行参数。
    • scope string Windows - usermachine 之一。 指示注册表项位于 HKEY_CURRENT USER 还是 HKEY_LOCAL_MACHINE 下。
    • enabled boolean Windows - 如果应用程序注册表项已获准启动,因此在任务管理器和 Windows 设置中显示为“已启用”,则为 true

app.setLoginItemSettings(settings) macOS Windows

  • settings Object
    • openAtLogin boolean (可选) - true 表示在登录时打开应用程序,false 表示删除应用程序作为登录项。 默认为 false
    • openAsHidden boolean (可选) macOS Deprecated - true 表示以隐藏方式打开应用程序。 默认为 false。 用户可以从“系统偏好设置”编辑此设置,因此在应用程序打开时应检查 app.getLoginItemSettings().wasOpenedAsHidden 以了解当前值。 此设置在 MAS 构建版本 或 macOS 13 及更高版本上不可用。
    • type string (可选) macOS - 要添加为登录项的服务类型。 默认为 mainAppService。 仅在 macOS 13 及更高版本上可用。
      • mainAppService - 主应用程序。
      • agentService - 启动代理的属性列表名称。 属性列表名称必须与应用程序的 Contents/Library/LaunchAgents 目录中的属性列表相对应。
      • daemonService string (可选) macOS - 启动代理的属性列表名称。 属性列表名称必须与应用程序的 Contents/Library/LaunchDaemons 目录中的属性列表相对应。
      • loginItemService string (可选) macOS - 登录项服务的属性列表名称。 属性列表名称必须与应用程序的 Contents/Library/LoginItems 目录中的属性列表相对应。
    • serviceName string (可选) macOS - 服务的名称。如果 type 为非默认值,则为必需。仅在 macOS 13 及更高版本上可用。
    • path string (可选) Windows - 登录时启动的可执行文件。 默认为 process.execPath
    • args string[] (可选) Windows - 传递给可执行文件的命令行参数。 默认为空数组。 请注意将路径用引号括起来。
    • enabled boolean (可选) Windows - true 将更改启动批准的注册表项,并在任务管理器和 Windows 设置中 启用 / 禁用 应用程序。 默认为 true
    • name string (可选) Windows - 要写入注册表的值名称。 默认为应用程序的 AppUserModelId()。

设置应用程序的登录项设置。

要在 Windows 上使用 Electron 的 autoUpdater(它使用 Squirrel),您需要将启动路径设置为您的可执行文件名,但在目录上一级,这是一个由 Squirrel 自动生成的存根应用程序,它将自动启动最新版本。

const { app } = require('electron')
const path = require('node:path')

const appFolder = path.dirname(process.execPath)
const ourExeName = path.basename(process.execPath)
const stubLauncher = path.resolve(appFolder, '..', ourExeName)

app.setLoginItemSettings({
openAtLogin: true,
path: stubLauncher,
args: [
// You might want to pass a parameter here indicating that this
// app was launched via login, but you don't have to
]
})

有关在 macOS 13 及更高版本上将不同服务设置为登录项的更多信息,请参阅 SMAppService

app.isAccessibilitySupportEnabled() macOS Windows

返回 boolean - 如果 Chrome 的辅助功能支持已启用,则为 true,否则为 false。 如果检测到辅助技术(例如屏幕阅读器)的使用,则此 API 将返回 true。 有关更多详细信息,请参阅 https://www.chromium.org/developers/design-documents/accessibility

app.setAccessibilitySupportEnabled(enabled) macOS Windows

手动启用 Chrome 的辅助功能支持,允许在应用程序设置中向用户公开辅助功能开关。 有关更多详细信息,请参阅 Chromium 的辅助功能文档。 默认情况下禁用。

此 API 必须在 ready 事件发出后调用。

注意: 渲染辅助功能树可能会显着影响应用程序的性能。 默认情况下不应启用它。

app.showAboutPanel()

显示应用程序的“关于”面板选项。 这些选项可以使用 app.setAboutPanelOptions(options) 覆盖。 此函数异步运行。

app.setAboutPanelOptions(options)

  • options Object
    • applicationName string (可选) - 应用程序的名称。
    • applicationVersion string (可选) - 应用程序的版本。
    • copyright string (可选) - 版权信息。
    • version string (可选) macOS - 应用程序的构建版本号。
    • credits string (可选) macOS Windows - 鸣谢信息。
    • authors string[] (可选) Linux - 应用程序作者列表。
    • website string (可选) Linux - 应用程序的网站。
    • iconPath string (可选) Linux Windows - JPEG 或 PNG 文件格式的应用程序图标路径。 在 Linux 上,将以 64x64 像素显示,同时保持纵横比。 在 Windows 上,48x48 PNG 将产生最佳视觉质量。

设置“关于”面板选项。 这将覆盖 macOS 上应用程序的 .plist 文件中定义的值。 有关更多详细信息,请参阅 Apple 文档。 在 Linux 上,必须设置值才能显示; 没有默认值。

如果您未设置 credits 但仍希望在应用程序中显示它们,AppKit 将在 NSBundle 类方法 main 返回的捆绑包中按顺序查找名为 “Credits.html”、“Credits.rtf” 和 “Credits.rtfd” 的文件。 将使用找到的第一个文件,如果找不到任何文件,则信息区域将留空。 有关更多信息,请参阅 Apple 文档

app.isEmojiPanelSupported()

返回 boolean - 当前操作系统版本是否允许使用本机表情符号选择器。

app.showEmojiPanel() macOS Windows

显示平台的本机表情符号选择器。

app.startAccessingSecurityScopedResource(bookmarkData) MAS

  • bookmarkData string - 由 dialog.showOpenDialogdialog.showSaveDialog 方法返回的 base64 编码的安全作用域书签数据。

返回 Function - 一旦您完成访问安全作用域文件,必须调用此函数。 如果您不记得停止访问书签,则会泄露内核资源,并且您的应用程序将完全失去访问沙箱外部的能力,直到您的应用程序重新启动。

const { app, dialog } = require('electron')
const fs = require('node:fs')

let filepath
let bookmark

dialog.showOpenDialog(null, { securityScopedBookmarks: true }).then(({ filePaths, bookmarks }) => {
filepath = filePaths[0]
bookmark = bookmarks[0]
fs.readFileSync(filepath)
})

// ... restart app ...

const stopAccessingSecurityScopedResource = app.startAccessingSecurityScopedResource(bookmark)
fs.readFileSync(filepath)
stopAccessingSecurityScopedResource()

开始访问安全作用域资源。 通过此方法,为 Mac App Store 打包的 Electron 应用程序可以访问沙箱外部,以访问用户选择的文件。 有关此系统如何工作的描述,请参阅 Apple 的文档

app.enableSandbox()

在应用程序上启用完全沙箱模式。 这意味着所有渲染器都将在沙箱中启动,而与 WebPreferences 中的 sandbox 标志的值无关。

此方法只能在应用程序准备就绪之前调用。

app.isInApplicationsFolder() macOS

返回 boolean - 应用程序当前是否从系统“应用程序”文件夹运行。 与 app.moveToApplicationsFolder() 结合使用

app.moveToApplicationsFolder([options]) macOS

  • options 对象 (可选)
    • conflictHandler Function<boolean> (可选) - 用于处理移动失败中潜在冲突的处理程序。
      • conflictType string - 处理程序遇到的移动冲突类型; 可以是 existsexistsAndRunning,其中 exists 表示应用程序目录中存在同名应用程序,而 existsAndRunning 表示它既存在又正在运行。

返回 boolean - 移动是否成功。 请注意,如果移动成功,您的应用程序将退出并重新启动。

默认情况下不会显示确认对话框。 如果您希望允许用户确认操作,您可以使用 dialog API 来执行此操作。

注意: 如果用户以外的任何原因导致移动失败,此方法将抛出错误。 例如,如果用户取消授权对话框,此方法将返回 false。 如果我们无法执行复制,则此方法将抛出错误。 错误消息应提供信息,并准确告诉您出了什么问题。

默认情况下,如果应用程序目录中存在与要移动的应用程序同名的应用程序,并且该应用程序运行,则现有应用程序将被丢弃,并且活动应用程序将移入其位置。 如果它正在运行,则预先存在的运行应用程序将获得焦点,并且先前活动的应用程序将自行退出。 可以通过提供可选的冲突处理程序来更改此行为,其中处理程序返回的布尔值确定是否使用默认行为解决移动冲突。 即,返回 false 将确保不采取进一步操作,返回 true 将导致默认行为,并且该方法将继续。

例如

const { app, dialog } = require('electron')

app.moveToApplicationsFolder({
conflictHandler: (conflictType) => {
if (conflictType === 'exists') {
return dialog.showMessageBoxSync({
type: 'question',
buttons: ['Halt Move', 'Continue Move'],
defaultId: 0,
message: 'An app of this name already exists'
}) === 1
}
}
})

意味着如果用户目录中已存在应用程序,如果用户选择“继续移动”,则该函数将继续其默认行为,现有应用程序将被丢弃,并且活动应用程序将移入其位置。

app.isSecureKeyboardEntryEnabled() macOS

返回 boolean - 安全键盘输入 是否已启用。

默认情况下,此 API 将返回 false

app.setSecureKeyboardEntryEnabled(enabled) macOS

  • enabled boolean - 启用或禁用 安全键盘输入

设置应用程序中是否启用 安全键盘输入

通过使用此 API,可以防止密码和其他敏感信息被其他进程拦截。

有关更多详细信息,请参阅 Apple 的文档

注意: 仅在需要时启用 安全键盘输入,并在不再需要时禁用它。

app.setProxy(config)

返回 Promise<void> - 当代理设置过程完成时解析。

为在没有关联 Session 的情况下发出的网络请求设置代理设置。 目前,这将影响在 实用程序进程 中使用 Net 发出的请求以及运行时发出的内部请求(例如:地理位置查询)。

此方法只能在应用程序准备就绪后调用。

app.resolveProxy(url)

  • url URL

返回 Promise<string> - 使用 Net实用程序进程 中尝试发出请求时将使用的 url 的代理信息解析。

app.setClientCertRequestPasswordHandler(handler) Linux

  • handler Function<Promise<string>>

    • clientCertRequestParams Object
      • hostname string - 需要客户端证书的站点的主机名
      • tokenName string - 密码设备的令牌(或插槽)名称
      • isRetry boolean - 是否有先前提示密码的失败尝试

    返回 Promise<string> - 使用密码解析

当需要密码来解锁 hostname 的客户端证书时,将调用处理程序。

const { app } = require('electron')

async function passwordPromptUI (text) {
return new Promise((resolve, reject) => {
// display UI to prompt user for password
// ...
// ...
resolve('the password')
})
}

app.setClientCertRequestPasswordHandler(async ({ hostname, tokenName, isRetry }) => {
const text = `Please sign in to ${tokenName} to authenticate to ${hostname} with your certificate`
const password = await passwordPromptUI(text)
return password
})

属性

app.accessibilitySupportEnabled macOS Windows

一个 boolean 属性,如果 Chrome 的辅助功能支持已启用,则为 true,否则为 false。 如果检测到辅助技术(例如屏幕阅读器)的使用,则此属性将为 true。 将此属性手动设置为 true 将手动启用 Chrome 的辅助功能支持,从而允许开发人员在应用程序设置中向用户公开辅助功能开关。

有关更多详细信息,请参阅 Chromium 的辅助功能文档。 默认情况下禁用。

此 API 必须在 ready 事件发出后调用。

注意: 渲染辅助功能树可能会显着影响应用程序的性能。 默认情况下不应启用它。

app.applicationMenu

一个 Menu | null 属性,如果已设置 Menu,则返回它,否则返回 null。 用户可以传递 Menu 来设置此属性。

app.badgeCount Linux macOS

一个 Integer 属性,返回当前应用程序的徽章计数。 将计数设置为 0 将隐藏徽章。

在 macOS 上,使用任何非零整数设置此项会在 Dock 图标上显示。 在 Linux 上,此属性仅适用于 Unity 启动器。

注意: Unity 启动器需要一个 .desktop 文件才能工作。有关更多信息,请阅读Unity 集成文档

注意: 在 macOS 上,您需要确保您的应用程序具有显示通知的权限,此属性才能生效。

app.commandLine Readonly

一个 CommandLine 对象,允许您读取和操作 Chromium 使用的命令行参数。

app.dock macOS Readonly

一个 Dock | undefined 对象,允许您对 macOS 上用户 Dock 中的应用程序图标执行操作。

app.isPackaged Readonly

一个 boolean 属性,如果应用程序已打包,则返回 true,否则返回 false。 对于许多应用程序,此属性可用于区分开发环境和生产环境。

app.name

一个 string 属性,指示当前应用程序的名称,即应用程序 package.json 文件中的名称。

通常,根据 npm 模块规范,package.jsonname 字段是一个简短的小写名称。您通常还应该指定一个 productName 字段,它是您应用程序的完整首字母大写的名称,Electron 将优先于 name 使用它。

app.userAgentFallback

一个 string,它是 Electron 将用作全局后备的用户代理字符串。

当未在 webContentssession 级别设置用户代理时,将使用此用户代理。 它对于确保您的整个应用程序具有相同的用户代理非常有用。 在应用程序初始化的早期将其设置为自定义值,以确保使用您的覆盖值。

app.runningUnderARM64Translation Readonly macOS Windows

一个 boolean,当为 true 时,表示应用程序当前在 ARM64 转换器(如 macOS Rosetta 转换环境 或 Windows WOW)下运行。

当用户错误地在 Rosetta 或 WOW 下运行 x64 版本时,您可以使用此属性提示用户下载 arm64 版本的应用程序。