app
控制应用程序的事件生命周期。
进程:主进程
以下示例展示了如何在最后一个窗口关闭时退出应用程序
const { app } = require('electron')
app.on('window-all-closed', () => {
app.quit()
})
事件
app
对象发出以下事件
事件:'will-finish-launching'
当应用程序完成基本启动时发出。在 Windows 和 Linux 上,will-finish-launching
事件与 ready
事件相同;在 macOS 上,此事件代表 NSApplication
的 applicationWillFinishLaunching
通知。
在大多数情况下,您应该在 ready
事件处理程序中完成所有操作。
事件:'ready'
返回值
event
事件launchInfo
Record<string, any> | NotificationResponse macOS
Electron 完成初始化后,此事件仅发出一次。在 macOS 上,launchInfo
包含 NSUserNotification
的 userInfo
或 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.preventDefault()
将阻止默认行为,即终止应用程序。
注意: 如果应用程序退出是由 autoUpdater.quitAndInstall()
启动的,那么 before-quit
在所有窗口发出 close
事件并关闭它们之**后**发出。
注意: 在 Windows 上,如果应用因系统关闭/重启或用户注销而关闭,则此事件不会发出。
事件:'will-quit'
返回值
event
事件
当所有窗口都已关闭并且应用程序即将退出时发出。调用 event.preventDefault()
将阻止默认行为,即终止应用程序。
有关 will-quit
和 window-all-closed
事件之间的区别,请参阅 window-all-closed
事件的描述。
注意: 在 Windows 上,如果应用因系统关闭/重启或用户注销而关闭,则此事件不会发出。
事件:'quit'
返回值
event
事件exitCode
整型
应用程序退出时发出。
注意: 在 Windows 上,如果应用因系统关闭/重启或用户注销而关闭,则此事件不会发出。
事件:'open-file' macOS
返回值
event
事件path
字符串
当用户希望使用应用程序打开文件时发出。open-file
事件通常在应用程序已打开且操作系统希望重用应用程序打开文件时发出。当文件拖放到 Dock 上且应用程序尚未运行时,也会发出 open-file
事件。请务必在应用程序启动的很早阶段(甚至在 ready
事件发出之前)监听 open-file
事件,以处理这种情况。
如果您想处理此事件,应调用 event.preventDefault()
。
在 Windows 上,您必须解析 process.argv
(在主进程中) 以获取文件路径。
事件:'open-url' macOS
返回值
event
事件url
URL
当用户希望使用应用程序打开 URL 时发出。您的应用程序的 Info.plist
文件必须在 CFBundleURLTypes
键中定义 URL scheme,并将 NSPrincipalClass
设置为 AtomApplication
。
与 open-file
事件一样,请务必在应用程序启动的很早阶段注册 open-url
事件的监听器,以检测应用程序是否因处理 URL 而被打开。如果您在收到 ready
事件后再注册监听器,您将错过那些触发应用程序启动的 URL。
事件:'activate' macOS
返回值
event
事件hasVisibleWindows
布尔值
当应用程序激活时发出。各种操作可以触发此事件,例如首次启动应用程序、尝试在应用程序已运行时重新启动,或者点击应用程序的 Dock 或任务栏图标。
事件:'did-become-active' macOS
返回值
event
事件
当应用程序变为活动状态时发出。这与 activate
事件不同,did-become-active
事件在应用程序每次变为活动状态时都会发出,而不仅仅是在点击 Dock 图标或重新启动应用程序时。当用户通过 macOS 应用程序切换器切换到应用程序时,也会发出此事件。
事件:'did-resign-active' macOS
返回值
event
事件
当应用程序不再活动且没有焦点时发出。这可能由点击另一个应用程序或使用 macOS 应用程序切换器切换到另一个应用程序触发。
事件:'continue-activity' macOS
返回值
event
事件type
字符串 - 标识活动的字符串。映射到NSUserActivity.activityType
。userInfo
unknown - 包含活动存储在另一设备上的特定于应用的状态。details
对象webpageURL
字符串 (可选) - 标识活动在另一设备上访问的网页 URL 的字符串(如果可用)。
在 Handoff 期间发出,当另一个设备的活动希望被恢复时。如果您想处理此事件,应调用 event.preventDefault()
。
用户活动只能在与活动源应用具有相同开发者团队 ID 并支持该活动类型的应用中继续。支持的活动类型在应用的 Info.plist
中 NSUserActivityTypes
键下指定。
事件:'will-continue-activity' macOS
返回值
event
事件type
字符串 - 标识活动的字符串。映射到NSUserActivity.activityType
。
在 Handoff 期间,在另一个设备的活动希望被恢复之前发出。如果您想处理此事件,应调用 event.preventDefault()
。
事件:'continue-activity-error' macOS
返回值
event
事件type
字符串 - 标识活动的字符串。映射到NSUserActivity.activityType
。error
字符串 - 包含错误本地化描述的字符串。
在 Handoff 期间,当另一个设备的活动恢复失败时发出。
事件:'activity-was-continued' macOS
返回值
event
事件type
字符串 - 标识活动的字符串。映射到NSUserActivity.activityType
。userInfo
unknown - 包含活动存储的特定于应用的状态。
在 Handoff 期间,当此设备的活动在另一个设备上成功恢复后发出。
事件:'update-activity-state' macOS
返回值
event
事件type
字符串 - 标识活动的字符串。映射到NSUserActivity.activityType
。userInfo
unknown - 包含活动存储的特定于应用的状态。
当 Handoff 即将在另一设备上恢复时发出。如果您需要更新要传输的状态,应立即调用 event.preventDefault()
,构建一个新的 userInfo
字典,并及时调用 app.updateCurrentActivity()
。否则,操作将失败,并会调用 continue-activity-error
。
事件:'new-window-for-tab' macOS
返回值
event
事件
当用户点击原生 macOS 新标签页按钮时发出。仅当当前的 BrowserWindow
具有 tabbingIdentifier
时,新标签页按钮才可见。
事件:'browser-window-blur'
返回值
event
事件window
BrowserWindow
当 browserWindow 失去焦点时发出。
事件:'browser-window-focus'
返回值
event
事件window
BrowserWindow
当 browserWindow 获得焦点时发出。
事件:'browser-window-created'
返回值
event
事件window
BrowserWindow
当创建新的 browserWindow 时发出。
事件:'web-contents-created'
返回值
event
事件webContents
WebContents
当创建新的 webContents 时发出。
事件:'certificate-error'
返回值
event
事件webContents
WebContentsurl
URLerror
字符串 - 错误代码certificate
Certificatecallback
函数isTrusted
布尔值 - 是否将证书视为可信
isMainFrame
布尔值
验证 url
的 certificate
失败时发出。要信任该证书,您应该使用 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'
返回值
event
事件webContents
WebContentsurl
URLcertificateList
Certificate[]callback
函数certificate
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
事件webContents
WebContents (可选)authenticationResponseDetails
对象url
URLpid
数字
authInfo
对象isProxy
布尔值scheme
字符串host
字符串port
整型realm
字符串
callback
函数username
字符串 (可选)password
字符串 (可选)
当 webContents
或 Utility 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'
返回值
event
事件webContents
WebContentsdetails
RenderProcessGoneDetails
当渲染器进程意外消失时发出。这通常是因为它崩溃或被杀死。
事件:'child-process-gone'
返回值
event
事件details
对象type
字符串 - 进程类型。以下值之一:工具进程
Zygote
沙盒助手
GPU
Pepper 插件
Pepper 插件代理
未知
reason
字符串 - 子进程退出的原因。可能的值:clean-exit
- 进程以退出代码零退出abnormal-exit
- 进程以非零退出代码退出killed
- 进程被发送 SIGTERM 或以其他方式外部杀死crashed
- 进程崩溃oom
- 进程内存不足launch-failed
- 进程从未成功启动integrity-failure
- Windows 代码完整性检查失败
exitCode
数字 - 进程的退出代码(例如 POSIX 上的 waitpid 状态,Windows 上的 GetExitCodeProcess 状态)。serviceName
字符串 (可选) - 进程的非本地化名称。name
字符串 (可选) - 进程的名称。工具进程的示例:Audio Service
,Content Decryption Module Service
,Network Service
,Video Capture
等。
当子进程意外消失时发出。这通常是因为它崩溃或被杀死。不包括渲染器进程。
事件:'accessibility-support-changed' macOS Windows
返回值
event
事件accessibilitySupportEnabled
布尔值 - 当 Chrome 的辅助功能支持启用时为true
,否则为false
。
当 Chrome 的辅助功能支持发生变化时发出。此事件在屏幕阅读器等辅助技术被启用或禁用时触发。有关更多详细信息,请参阅 https://www.chromium.org/developers/design-documents/accessibility。
事件:'session-created'
返回值
session
Session
当 Electron 创建新的 session
时发出。
const { app } = require('electron')
app.on('session-created', (session) => {
console.log(session)
})
事件:'second-instance'
返回值
event
事件argv
字符串[] - 第二个实例的命令行参数数组workingDirectory
字符串 - 第二个实例的工作目录additionalData
unknown - 从第二个实例传递的附加数据的 JSON 对象
当第二个实例执行并调用 app.requestSingleInstanceLock()
时,此事件将在应用程序的主要实例中发出。
argv
是第二个实例的命令行参数数组,workingDirectory
是其当前工作目录。通常应用程序会通过使其主窗口获得焦点且非最小化来响应此事件。
注意: argv
不会与传递给第二个实例的参数列表完全相同。顺序可能会改变,并且可能会附加额外的参数。如果您需要保持完全相同的参数,建议改用 additionalData
。
注意: 如果第二个实例是由与第一个实例不同的用户启动的,则 argv
数组将不包含参数。
此事件保证在 app
的 ready
事件发出之后发出。
注意: Chromium 可能会添加额外的命令行参数,例如 --original-process-start-time
。
方法
app
对象具有以下方法
注意: 某些方法仅在特定操作系统上可用并已标注。
app.quit()
尝试关闭所有窗口。将首先发出 before-quit
事件。如果所有窗口都成功关闭,将发出 will-quit
事件,并且默认情况下应用程序将终止。
此方法保证所有 beforeunload
和 unload
事件处理程序都正确执行。窗口有可能在 beforeunload
事件处理程序中返回 false
来取消退出。
app.exit([exitCode])
exitCode
整型 (可选)
立即使用 exitCode
退出。exitCode
默认为 0。
所有窗口将立即关闭而不会询问用户,并且不会发出 before-quit
和 will-quit
事件。
app.relaunch([options])
当当前实例退出时重新启动应用。
默认情况下,新实例将使用与当前实例相同的工作目录和命令行参数。如果指定了 args
,则 args
将作为命令行参数传递。如果指定了 execPath
,则将执行 execPath
而不是当前应用进行重新启动。
请注意,此方法执行时不会退出应用。您必须在调用 app.relaunch
后调用 app.quit
或 app.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])
在 Linux 上,聚焦于第一个可见窗口。在 macOS 上,使应用程序成为活动应用。在 Windows 上,聚焦于应用程序的第一个窗口。
您应尽量少使用 steal
选项。
app.hide()
macOS
隐藏所有应用程序窗口,但不最小化它们。
app.isHidden()
macOS
返回值 boolean
- 如果应用程序(包括所有窗口)被隐藏(例如使用 Command-H
),则为 true
,否则为 false
。
app.show()
macOS
显示隐藏后的应用程序窗口。不会自动聚焦它们。
app.setAppLogsPath([path])
path
字符串 (可选) - 用于日志的自定义路径。必须是绝对路径。
设置或创建应用程序日志目录,然后可以使用 app.getPath()
或 app.setPath(pathName, newPath)
操作此目录。
在不带 path
参数的情况下调用 app.setAppLogsPath()
将导致此目录在 macOS 上设置为 ~/Library/Logs/YourAppName
,在 Linux 和 Windows 上设置为 userData
目录内。
app.getAppPath()
返回值 string
- 当前应用程序目录。
app.getPath(name)
name
字符串 - 您可以通过名称请求以下路径:home
用户主目录。appData
每个用户的应用程序数据目录,默认指向:- Windows 上的
%APPDATA%
- Linux 上的
$XDG_CONFIG_HOME
或~/.config
- macOS 上的
~/Library/Application Support
- Windows 上的
userData
存储您应用配置文件的目录,默认是appData
目录后附加您的应用名称。按照惯例,存储用户数据的文件应该写入此目录,不建议在此写入大文件,因为某些环境可能会将此目录备份到云存储。sessionData
存储由Session
生成的数据的目录,例如 localStorage、cookies、磁盘缓存、下载的字典、网络状态、开发者工具文件。默认情况下,这指向userData
。Chromium 可能会在此写入非常大的磁盘缓存,因此如果您的应用不依赖 localStorage 或 cookies 等浏览器存储来保存用户数据,建议将此目录设置到其他位置,以避免污染userData
目录。temp
临时目录。exe
当前可执行文件。module
libchromiumcontent
库。desktop
当前用户的桌面目录。documents
用户“我的文档”目录。downloads
用户下载目录。music
用户音乐目录。pictures
用户图片目录。videos
用户视频目录。recent
用户最近的文件目录 (仅限 Windows)。logs
应用日志文件夹目录。crashDumps
存储崩溃转储文件的目录。
返回值 string
- 与 name
关联的特殊目录或文件的路径。失败时抛出 Error
。
如果在调用 app.setAppLogsPath()
之前调用 app.getPath('logs')
,则将创建一个默认日志目录,相当于在不带 path
参数的情况下调用 app.setAppLogsPath()
。
app.getFileIcon(path[, options])
path
字符串
返回值 Promise<NativeImage>
- 返回应用图标,这是一个 NativeImage。
获取与路径关联的图标。
在 Windows 上,有两种图标:
- 与某些文件扩展名关联的图标,例如
.mp3
,.png
等。 - 文件本身内的图标,例如
.exe
,.dll
,.ico
。
在 Linux 和 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
文件中未找到版本,则返回当前 bundle 或可执行文件的版本。
app.getName()
返回 string
- 当前应用程序的名称,即应用程序的 package.json
文件中的名称。
通常,根据 npm 模块规范,package.json
的 name
字段是一个简短的小写名称。您通常还应该指定一个 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 scheme)的默认处理程序。它允许您的应用程序更深入地集成到操作系统中。注册后,所有带有 your-protocol://
的链接都将由当前可执行文件打开。整个链接,包括协议,都将作为参数传递给您的应用程序。
注意: 在 macOS 上,您只能注册已添加到应用程序 info.plist
中的协议,info.plist
在运行时无法修改。但是,您可以在构建时通过 Electron Forge、Electron Packager 或使用文本编辑器编辑 info.plist
来更改该文件。详情请参阅 Apple 的文档。
注意: 在 Windows Store 环境中(打包为 appx
时),此 API 的所有调用都将返回 true
,但它设置的注册表项无法被其他应用程序访问。要将您的 Windows Store 应用程序注册为默认协议处理程序,您必须在清单中声明该协议。
该 API 内部使用 Windows 注册表和 LSSetDefaultHandlerForURLScheme
。
app.removeAsDefaultProtocolClient(protocol[, path, args])
macOS Windows
protocol
string - 您的协议名称,不带://
。path
string (可选) Windows - 默认为process.execPath
args
string[] (可选) Windows - 默认为一个空数组
返回 boolean
- 调用是否成功。
此方法检查当前可执行文件是否为某个协议(也称为 URI scheme)的默认处理程序。如果是,它将移除应用程序作为默认处理程序。
app.isDefaultProtocolClient(protocol[, path, args])
protocol
string - 您的协议名称,不带://
。path
string (可选) Windows - 默认为process.execPath
args
string[] (可选) Windows - 默认为一个空数组
返回 boolean
- 当前可执行文件是否为某个协议(也称为 URI scheme)的默认处理程序。
注意: 在 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 scheme)的默认处理程序的应用程序名称。
app.getApplicationInfoForProtocol(url)
macOS Windows
url
string - 包含要检查的协议名称的 URL。与同类其他方法不同,此方法接受完整的 URL,至少包括://
(例如https://
)。
返回 Promise<Object>
- 解析为包含以下内容的 Object
icon
NativeImage - 处理该协议的应用程序的显示图标。path
string - 处理该协议的应用程序的安装路径。name
string - 处理该协议的应用程序的显示名称。
此方法返回一个 Promise,其中包含 URL 的协议(也称为 URI scheme)的默认处理程序的应用程序名称、图标和路径。
app.setUserTasks(tasks)
Windows
tasks
Task[] -Task
对象的数组
将 `tasks` 添加到 Windows Jump List 的 Tasks 类别。
tasks
是一个 Task 对象的数组。
返回 boolean
- 调用是否成功。
注意: 如果您想进一步自定义 Jump List,请改用 app.setJumpList(categories)
。
app.getJumpListSettings()
Windows
返回 Object
minItems
Integer - 将在 Jump List 中显示的最小项目数(有关此值的更详细说明,请参阅 MSDN 文档)。removedItems
JumpListItem[] -JumpListItem
对象的数组,对应于用户从 Jump List 自定义类别中明确移除的项目。在下一次调用app.setJumpList()
时,不得将这些项目重新添加到 Jump List 中,Windows 不会显示包含任何已移除项目的自定义类别。
app.setJumpList(categories)
Windows
categories
JumpListCategory[] |null
-JumpListCategory
对象的数组。
返回 string
设置或移除应用程序的自定义 Jump List,并返回以下字符串之一
ok
- 没有出现错误。error
- 发生一个或多个错误,启用运行时日志记录以找出可能的原因。invalidSeparatorError
- 尝试将分隔符添加到 Jump List 的自定义类别中。分隔符只允许在标准Tasks
类别中使用。fileTypeRegistrationError
- 尝试将文件链接添加到 Jump List 中,而该文件类型应用程序未注册处理。customCategoryAccessDeniedError
- 由于用户隐私或组策略设置,无法将自定义类别添加到 Jump List 中。
如果 categories
为 null
,则先前设置的自定义 Jump List(如果有)将被应用程序的标准 Jump List(由 Windows 管理)替换。
注意: 如果 `JumpListCategory` 对象既没有设置 `type` 也没有设置 `name` 属性,那么它的 `type` 被假定为 `tasks`。如果设置了 `name` 属性但省略了 `type` 属性,则 `type` 被假定为 `custom`。
注意: 用户可以从自定义类别中移除项目,并且 Windows 在下一次成功调用 app.setJumpList(categories)
之前不允许将已移除的项目重新添加回自定义类别。在此之前尝试将已移除的项目重新添加到自定义类别将导致整个自定义类别从 Jump List 中省略。已移除项目列表可以使用 app.getJumpListSettings()
获取。
注意: Jump List 项目的 description
属性的最大长度为 260 个字符。超出此限制的项目将不会添加到 Jump List 中,也不会显示。
下面是一个创建自定义 Jump List 的简单示例
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-file
和 open-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 (可选) - 如果恢复设备上没有安装合适的应用程序,则在浏览器中加载的网页。 scheme 必须是http
或https
。
创建一个 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
将 Application User Model ID 更改为 id
。
app.setActivationPolicy(policy)
macOS
policy
string - 可以是 'regular'、'accessory' 或 'prohibited'。
设置给定应用程序的激活策略。
激活策略类型
- 'regular' - 应用程序是出现在 Dock 中并可能具有用户界面的普通应用程序。
- 'accessory' - 应用程序不出现在 Dock 中且没有菜单栏,但可以通过编程或点击其窗口之一来激活。
- 'prohibited' - 应用程序不出现在 Dock 中,且可能无法创建窗口或被激活。
app.importCertificate(options, callback)
Linux
callback
函数result
Integer - 导入结果。
将 pkcs12 格式的证书导入到平台证书存储中。 callback
会被调用,并传入导入操作的 result
,根据 Chromium net_error_list,值为 0
表示成功,任何其他值表示失败。
app.configureHostResolver(options)
配置主机解析(DNS 和 DNS-over-HTTPS)。默认情况下,将按顺序使用以下解析器
- DNS-over-HTTPS,如果 DNS 提供商支持,然后
- 内置解析器(默认仅在 macOS 上启用),然后
- 系统的解析器(例如
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 - 可以是basic
或complete
。
返回 `Promise<unknown>`
当 infoType
等于 complete
时:Promise 将解析为包含所有 GPU 信息的 Object
,与 chromium 的 GPUInfo 对象中所示一致。这包括 chrome://gpu
页面上显示的版本和驱动程序信息。
当 infoType
等于 basic
时:Promise 将解析为包含属性较少的 Object
,少于使用 complete
请求时。这是一个 basic 响应示例
{
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'
}
如果只需要 vendorId
或 deviceId
等基本信息,应优先使用 basic
。
app.setBadgeCount([count])
Linux macOS
count
Integer (可选) - 如果提供了值,则将标记设置为该值;否则,在 macOS 上显示一个纯白色圆点(例如,未知通知数量)。在 Linux 上,如果未提供值,则不会显示标记。
返回 boolean
- 调用是否成功。
设置当前应用程序的计数器标记。将计数设置为 0
将隐藏标记。
在 macOS 上,它显示在 Dock 图标上。在 Linux 上,它仅适用于 Unity launcher。
注意: Unity launcher 需要一个 .desktop
文件才能工作。更多信息,请阅读Unity 集成文档。
注意:在 macOS 上,您需要确保您的应用程序具有显示通知的权限,此方法才能生效。
app.getBadgeCount()
Linux macOS
返回 Integer
- 计数器徽章中显示的当前值。
app.isUnityRunning()
Linux
返回 boolean
- 当前桌面环境是否为 Unity 启动器。
app.getLoginItemSettings([options])
macOS Windows
如果您在 app.setLoginItemSettings
中提供了 path
和 args
选项,则需要在此处传递相同的参数,以便正确设置 openAtLogin
。
返回 Object
openAtLogin
boolean - 如果应用设置为在登录时打开,则为true
。openAsHidden
boolean macOS 已废弃 - 如果应用设置为在登录时隐藏打开,则为true
。这在 macOS 13 及更高版本上无效。wasOpenedAtLogin
boolean macOS - 如果应用在登录时自动打开,则为true
。wasOpenedAsHidden
boolean macOS 已废弃 - 如果应用作为隐藏的登录项打开,则为true
。这表明应用不应在启动时打开任何窗口。此设置在 MAS 构建版本 或 macOS 13 及更高版本上不可用。restoreState
boolean macOS 已废弃 - 如果应用作为应恢复上一会话状态的登录项打开,则为true
。这表明应用应恢复上次关闭时打开的窗口。此设置在 MAS 构建版本 或 macOS 13 及更高版本上不可用。status
string macOS - 可以是not-registered
、enabled
、requires-approval
或not-found
之一。executableWillLaunchAtLogin
boolean Windows - 如果应用设置为在登录时打开且其运行键未被禁用,则为true
。这与openAtLogin
不同,因为它会忽略args
选项,如果给定的可执行文件将使用任何参数在登录时启动,则此属性将为 true。launchItems
Object[] Windowsname
string Windows - 注册表项的名称值。path
string Windows - 对应于注册表项的应用的可执行文件。args
string[] Windows - 传递给可执行文件的命令行参数。scope
string Windows -user
或machine
之一。表示注册表项是在HKEY_CURRENT USER
下还是在HKEY_LOCAL_MACHINE
下。enabled
boolean Windows - 如果应用的注册表项被批准在启动时运行,并因此在任务管理器和 Windows 设置中显示为enabled
,则为true
。
app.setLoginItemSettings(settings)
macOS Windows
settings
ObjectopenAtLogin
boolean (可选) -true
表示在登录时打开应用,false
表示将应用从登录项中移除。默认为false
。openAsHidden
boolean (可选) macOS 已废弃 -true
表示隐藏打开应用。默认为false
。用户可以在“系统偏好设置”中修改此设置,因此当应用打开时应检查app.getLoginItemSettings().wasOpenedAsHidden
以了解当前值。此设置在 MAS 构建版本 或 macOS 13 及更高版本上不可用。type
string (可选) macOS - 添加为登录项的服务类型。默认为mainAppService
。仅在 macOS 13 及更高版本上可用。mainAppService
- 主应用程序。agentService
- launch agent 的属性列表名称。属性列表名称必须与应用Contents/Library/LaunchAgents
目录中的属性列表对应。daemonService
string (可选) macOS - launch agent 的属性列表名称。属性列表名称必须与应用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 自动生成的 stub 应用程序,它会自动启动最新版本。
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
enabled
boolean - 启用或禁用 辅助功能树 渲染
手动启用 Chrome 的辅助功能支持,允许在应用设置中向用户暴露辅助功能开关。更多详情请参阅 Chromium 辅助功能文档。默认禁用。
此 API 必须在 ready
事件发出后调用。
注意:渲染辅助功能树可能会显著影响应用的性能。默认情况下不应启用它。
app.showAboutPanel()
显示应用的关于面板选项。这些选项可以通过 app.setAboutPanelOptions(options)
覆盖。此函数异步运行。
app.setAboutPanelOptions(options)
设置关于面板选项。这将覆盖 macOS 应用 `.plist` 文件中定义的值。更多详情请参阅 Apple 文档。在 Linux 上,必须设置值才会显示;没有默认值。
如果您未设置 credits
但仍希望在应用中显示它们,AppKit 将在 NSBundle 类方法 main 返回的 bundle 中按顺序查找名为 "Credits.html"、"Credits.rtf" 和 "Credits.rtfd" 的文件。找到的第一个文件将被使用,如果找不到任何文件,信息区域将留空。更多信息请参阅 Apple 文档。
app.isEmojiPanelSupported()
返回 boolean
- 当前操作系统版本是否允许使用原生表情符号选择器。
app.showEmojiPanel()
macOS Windows
显示平台的原生表情符号选择器。
app.startAccessingSecurityScopedResource(bookmarkData)
MAS
bookmarkData
string - 由dialog.showOpenDialog
或dialog.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
返回 boolean
- 移动是否成功。请注意,如果移动成功,您的应用将退出并重新启动。
默认情况下不会出现确认对话框。如果您希望允许用户确认操作,可以使用 dialog
API。
注意:如果除用户以外的任何因素导致移动失败,此方法将抛出错误。例如,如果用户取消了授权对话框,此方法将返回 false。如果复制失败,则此方法将抛出错误。错误消息应提供信息,并准确说明出错的原因。
默认情况下,如果应用程序目录中存在与正在移动的应用同名的应用且未运行,则现有应用将被移到废纸篓,当前活动的应用将移入其位置。如果它正在运行,则已存在的正在运行的应用将获得焦点,之前活动的应用将自行退出。可以通过提供可选的冲突处理器来改变此行为,处理器返回的 boolean 值决定是否使用默认行为解决移动冲突。即,返回 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)
config
ProxyConfig
返回 Promise<void>
- 在代理设置过程完成时解析。
为未关联 Session 的网络请求设置代理。目前这将影响在 utility process 中使用 Net 发出的请求以及运行时发出的内部请求(例如:地理位置查询)。
此方法只能在应用就绪后调用。
app.resolveProxy(url)
url
URL
返回 Promise<string>
- 解析为用于在 utility process 中尝试使用 Net 发出请求时使用的 url
的代理信息。
app.setClientCertRequestPasswordHandler(handler)
Linux
-
handler
Function<Promise<string>>clientCertRequestParams
Objecthostname
string - 需要客户端证书的站点的 hostnametokenName
string - 加密设备的 token (或槽) 名称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 launcher 需要一个 .desktop
文件才能工作。更多信息,请阅读Unity 集成文档。
注意:在 macOS 上,您需要确保您的应用程序具有显示通知的权限,此属性才能生效。
app.commandLine
只读
一个 CommandLine
对象,允许您读取和操作 Chromium 使用的命令行参数。
app.dock
macOS 只读
一个 Dock | undefined
属性 (在 macOS 上是 Dock
,在所有其他平台上是 undefined
),允许您对用户 Dock 中的应用图标执行操作。
app.isPackaged
只读
一个 boolean
属性,如果应用已打包,则返回 true
,否则返回 false
。对于许多应用,此属性可用于区分开发环境和生产环境。
app.name
一个 string
属性,表示当前应用的名称,即应用 package.json
文件中的名称。
通常,根据 npm 模块规范,package.json
的 name
字段是一个简短的小写名称。您通常还应该指定一个 productName
字段,这是应用程序的完整大写名称,并且 Electron 将优先使用它而不是 name
。
app.userAgentFallback
一个 string
,是 Electron 将用作全局 fallback 的用户代理字符串。
这是在 webContents
或 session
级别未设置用户代理时将使用的用户代理。这对于确保整个应用具有相同的用户代理很有用。在应用初始化中尽早将其设置为自定义值,以确保使用您覆盖的值。
app.runningUnderARM64Translation
只读 macOS Windows
一个 boolean
,当为 true
时表示应用当前正在 ARM64 翻译器下运行(例如 macOS Rosetta 翻译环境 或 Windows WOW)。
您可以使用此属性提示用户下载应用的 arm64 版本,尤其当他们错误地在 Rosetta 或 WOW 下运行 x64 版本时。