1. app

原文:https://github.com/electron/electron/blob/master/docs/api/app.md
译者:Lin

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

进程:主进程

下面的例子将展示如何在最后一个窗口被关闭时关闭应用程序。

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

<h2 id="events">事件</h2>

app对象会分发下面的事件。

<h3 id="event-">事件:‘will-finish-launching’</h3>

应用程序完成基本的启动时分发。Windows和Linux下,will-finish-launching事件和ready事件是相同的;macOS下,这个事件代表了NSApplication中的applicationWillFinishLaunching通知。你通常会在这里设置open-fileopen-url事件的监听,并且开始记录崩溃日志和自动更新。

大多数情况下,你只需要在ready事件回调中做所有事情。

<h3 id="event-">事件:‘ready’</h3>
返回值:

  • launchInfoObject类型(macOS)

Electron完成初始化时分发事件。MacOS中,launchInfo包含了NSUserNotification中用来打开应用程序的userInfo,如果它从通知中心被分发。如果这个事件被分发你可以调用app.isReady()检查。

<h3 id="event-">事件:‘window-all-closed’</h3>

当所有窗口都被关闭时分发此事件。

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

<h3 id="event-">事件:‘before-quit’</h3>
返回值:

  • event Event类型

应用程序开始关闭窗口之前分发事件。调用event.preventDefault()将阻止终止应用程序的默认行为。

注意:如果应用程序是因为autoUpdater.quitAndInstall()而退出,那么before-quit将会在所有窗口分发close事件并且关闭所有窗口之后被分发。

<h3 id="event-">事件:‘will-quit’</h3>
返回值:

  • event Event类型

所有窗口都已经关闭,应用程序将要退出的时候分发事件。调用event.preventDefault()将阻止终止应用程序的默认行为。

查看window-all-closed事件和will-quit and window-all-closed事件描述上的区别。

<h3 id="event-quit">事件:‘quit’</h3>
返回值:

  • event Event类型
  • exitCode Integer类型

应用程序正在退出时被分发。

<h3 id="event-open-file">事件:‘open-file’ <i>(MacOS)</i></h3>
返回值:

  • event Event类型
  • path String类型

用户想要使用应用程序打开一个文件时被分发。open-file事件通常在应用程序已经打开并且系统想要应用程序重新文件时分发。open-file也在一个文件拖入到dock并且应用程序尚未运行时被分发。请确认非常早的监听open-file事件,以便在你应用程序启动时能够处理这个事件(甚至会在ready事件分发之前就会出现)。

如果你想要处理这个事件,你需要调用event.preventDefault()

Windows中,你需要分析process.argv(在主进程中)来得到文件路径。

<h3 id="event-open-url">事件:‘open-url’ <i>(MacOS)</i></h3>
返回值:

  • event Event类型
  • url String类型

当用户想要使用应用程序打开一个地址时被分发。你的应用程序的Info.plist文件必须使用CFBundleURLTypes键定义url体系,并且在AtomApplication中设置NSPrincipalClass

如果你想要处理这个事件,你需要调用event.preventDefault()。

<h3 id="event-activate">事件:‘activate’ <i>(MacOS)</i></h3>
返回值:

  • event Event类型
  • hasVisibleWindows Boolean类型

当用户点击应用程序在dock上的图标导致应用程序被激活时分发。

<h3 id="event-continue-activity">事件:‘continue-activity’ <i>(MacOS)</i></h3>
返回值:

  • event Event类型
  • type String类型 - A string identifying the activity。对应NSUserActivity.activityType
  • userInfo Object类型 - Contains app-specific state stored by the activity on another device.

Emitted during Handoff when an activity from a different device wants to be resumed. 如果你想要处理这个事件,你需要调用event.preventDefault()。

A user activity can be continued only in an app that has the same developer Team ID as the activity’s source app and that supports the activity’s type. Supported activity types are specified in the app’s Info.plist under the NSUserActivityTypes key.

<h3 id="event-browser-window-blur">事件:‘browser-window-blur’</h3>
返回值:

  • event Event类型
  • window BrowserWindow类型

当一个browserWindow失去焦点的时候被分发。

<h3 id="event-browser-window-focus">事件:‘browser-window-focus’</h3>
返回值:

  • event Event类型
  • window BrowserWindow类型

当一个browserWindow获得焦点的时候被分发。

<h3 id="event-browser-window-created">事件:'browser-window-created’</h3>
返回值:

  • event Event类型
  • window BrowserWindow类型

当一个新的browserWindow被创建的时候被分发。

<h3 id="event-certificate-error">事件:‘certificate-error’</h3>
返回值:

  • event Event类型
  • webContents WebContents类型
  • url String类型
  • error String类型 - 错误代码
  • certificate Certificate类型
  • callback Function类型
    • isTrusted Boolean类型 - 证书是否是可信的

无法验证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)
    }
})

<h3 id="event-select-client-certificate">事件:‘select-client-certificate’</h3>
返回值:

  • event Event类型
  • webContents WebContents类型
  • url URL类型
  • certificateList Certificate[]类型
  • callback Function类型
    • 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])
})

<h3 id="event-login">事件:‘login’</h3>
返回值:

  • event Event类型
  • webContents WebContents类型
  • request Object类型
    • method String类型
    • url URL类型
    • referrer URL类型
  • authInfo Object类型
    • isProxy Boolean类型
    • scheme String类型
    • host String类型
    • port Integer类型
    • realm String类型
  • callback Function类型
    • username String类型
    • password String类型

webContents想要做基本认证(auth)时被分发。

默认行为是取消所有认证,想要重写你需要调用event.preventDefault()阻止默认行为,并且使用证书中的数据调用callback(username, password)

const {app} = require('electron')

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

<h3 id="event-gpu-process-crashed">事件:‘gpu-process-crashed’</h3>
返回值:

  • event Event类型
  • killed Boolean类型

当GPU进程崩溃或者被杀死时被分发。

<h3 id="event-accessibility-support-changed">事件:‘accessibility-support-changed’ <i>(MacOS,Windows)</i></h3>
返回值:

  • event Event类型
  • accessibilitySupportEnabled Boolean类型 - true是Chrome的accessibility支持被开启,false则是被停用。

当Chrome的accessibility支持改变时被分发。这个事件在残疾人辅助功能,如屏幕阅读器被启用或停用时触发。详情见https://www.chromium.org/developers/design-documents/accessibility

<h2 id="methods">方法</h2>

app对象有以下方法:

注意:某些方法只适用于特定的操作系统,已经被标记。

<h3 id="app-quit">app.quit()</h3>

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

这个方法保证了所有beforeunloadunload事件的回调被正确的执行。有可能在某个窗口取消退出并且在beforeunload事件中返回false

<h3 id="app-exit">app.exit([exitCode])</h3>

  • exitCode Integer类型(可选参数)

传入参数exitCode立即退出。exitCode默认为0。

除非告诉用户否则所有窗口立刻关闭,并且before-quit事件和will-quit事件将不会被分发。

<h3 id="app-relaunch">app.relaunch([options])</h3>

  • options Object类型(可选参数)
    • args String[]类型 -(可选参数)
    • execPath String类型(可选参数)

当前应用实例被退出之后重载应用。

默认情况下,新的实例将会使用同样的工作目录和当前实例的命令行参数。当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)

<h3 id="app-isReady">app.isReady()</h3>

返回值为Boolean类型 - 如果是true则表示Electron已经完成初始化,如果是false则表示尚未完成初始化。

<h3 id="app-focus">app.focus()</h3>

Linux中,聚焦在第一个可见的窗口。MacOS中,使得应用程序变成激活状态的应用程序。Windows中,聚焦在应用程序的第一个窗口。

<h3 id="app-hide">app.hide()</h3>

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

<h3 id="app-show">app.show()</h3>

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

<h3 id="app-getAppPath">app.getAppPath()</h3>

返回值为String类型 - 当前应用程序的目录。

<h3 id="app-getPath">app.getPath(name)</h3>

  • name String类型

返回值为String类型 - 指定目录或文件的整体路径。如果发生故障将会抛出一个错误。

你可以通过名字请求以下的路径:

  • home 用户的主页目录
  • appData 每个用户应用程序数据目录,默认情况下指向下面的路径:
    • %APPDATA% 在Windows中
    • $XDG_CONFIG_HOME或者~/.config 在Linux中
    • ~/Library/Application Support 在macOS中
  • userData 存储你的应用程序配置文件的目录,默认情况下是appData`目录加上你的应用名称。
  • temp 临时文件目录。
  • exe 当前可执行文件。
  • module libchromiumcontent库。
  • desktop 当前用户桌面目录。
  • documents 用户的“我的文档”的目录。
  • downloads 用户的下载目录。
  • music 用户的音乐目录。
  • pictures 用户的图片目录。
  • videos 用户的视频目录。
  • pepperFlashSystemPlugin Pepper Flash插件在当前系统版本中的完整路径。

<h3 id="app-setPath">app.setPath(name, path)</h3>

  • name String类型
  • path String类型

使用指定的文件夹或者文件重写指定的name对应的路径。如果指定的文件夹不存在那么这个方法将自动创建这个文件夹。如果发生故障将会抛出一个错误。

你只能重写app.getPath中定义的name对应的路径。

默认情况下,网页的cookies和缓存将会被存储在userData目录下。如果你想要改变这个本地路径,你需要在ready事件被app模块分发之前重写userData对应的路径。

<h3 id="app-getVersion">app.getVersion()</h3>

R返回值为String类型 - 已经加载的应用程序的版本号。如果在package.json文件内没有发现应用程序的版本号,那么就会返回当前包或者可执行文件的版本号。

<h3 id="app-getName">app.getName()</h3>

返回值为String类型 - 写在应用程序package.json文件中的当前应用程序的名字。

通常根据npm 模块说明,package.json中的name字段是短的小写名称。你通常都需要指定一个productName字段,这个字段是你应用程序的全部大写的名字,这个字段的名字Electron将会作为首选名称。

<h3 id="app-setName">app.setName(name)</h3>

  • name String类型

重写当前应用程序的名字。

<h3 id="app-getLocale">app.getLocale()</h3>

返回值为String类型 - 当前应用程序的本地路径。可能的返回值都将会被记录在这里。

注意:当发布你的打包好的应用时,你需要发送到本地文件夹。

注意:Windows中你需要在ready事件被分发之后调用它。

<h3 id="app-addRecentDocument">app.addRecentDocument(path) <i>(MacOS,Windows)</i></h3>

  • path String类型

添加路径到最近使用的文档列表。

这个列表由系统管理。Windows中你可以在任务栏查看这个列表,macOS中你可以在dock菜单中查看这个列表。

<h3 id="app-clearRecentDocuments">app.clearRecentDocuments() <i>(MacOS,Windows)</i></h3>

清除最近使用的文件列表。

<h3 id="app-setAsDefaultProtocolClient">app.setAsDefaultProtocolClient(protocol[, path, args]) <i>(MacOS,Windows)</i></h3>

  • protocol String类型 - 你的协议的名字,不包含://。如果你想要你的应用处理electron://链接,则使用electron作为参数来调用这个方法。
  • path String类型(可选参数) Windows可用 - 默认为process.execPath
  • args String[]类型(可选参数)Windows可用 - 默认为空数组

返回值为Boolean类型 - 是否调用成功。

这个方法设置当前的可执行文件的默认处理协议(又名URI方案)。它将允许你集成的应用程序到系统的更深层次中。注册一次,所有的your-protocol://链接都将会使用当前的可执行文件打开。

Windows中你可以提供可选的path参数,路径指向的可执行文件,当可执行文件启动时,args中的数组参数将会被传递到那个可执行文件中。

注意:MacOS中你只能注册已经添加到你的应用程序的info.plist文件中的协议,是不可以在运行时间内更改的。然而你可以在编译的时候使用一个简单的文本编辑器或脚本来更改它。详情请参阅Apple’s documentation

这个接口使用Windows Registry和LSSetDefaultHandlerForURLScheme内核。

<h3 id="app-removeAsDefaultProtocolClient">app.removeAsDefaultProtocolClient(protocol[, path, args]) <i>(MacOS,Windows)</i></h3>

  • rotocol String类型 - 你的协议的名字,不包含://
  • path String类型(可选参数)Windows可用 - 默认为process.execPath
  • args String[]类型(可选参数)Windows可用 - 默认为空数组

返回值为Boolean类型 - 是否调用成功。

这个方法检查当前可执行文件是否会默认处理一个协议(又名URI方案)。如果会处理,将从应用中移除这个默认处理。

<h3 id="app-isDefaultProtocolClient">app.isDefaultProtocolClient(protocol[, path, args]) <i>(MacOS,Windows)</i></h3>

  • protocol String类型 - 你的协议的名字,不包含://
  • path String类型(可选参数)Windows可用 - 默认为process.execPath
  • args String[]类型(可选参数)Windows可用 - 默认为空数组

返回值为Boolean类型。

这个方法检查当前可执行文件是否会默认处理一个协议(又名URI方案)。如果会处理,将会返回true,否则将会返回false

注意:MacOS中,如果这个应用程序已经注册了默认处理的协议,则你可以使用这个方法检查。你也可以通过macOS机器中的~/Library/Preferences/com.apple.LaunchServices.plist文件来检查。详情请参阅Apple’s documentation

这个接口使用Windows Registry和LSSetDefaultHandlerForURLScheme内核。

<h3 id="app-setUserTasks">app.setUserTasks(tasks) <i>(Windows)</i></h3>

  • tasks Task[]类型 - Task类型的对象的数组。

Windows中添加tasks到跳转列表的Tasks部分。

tasksTask类型的对象的数组。

返回值为Boolean类型 - 是否调用成功。

注意:如果你想要自定义更多关于跳转列表的内容,请使用app.setJumpList(categories)

<h3 id="app-getJumpListSettings">app.getJumpListSettings() <i>(Windows)</i></h3>

返回值为Object类型:

  • minItems Integer类型 - 将在跳转列表中展示的项目的最小数量(关于这个值的更详细的描述请看MSDN docs)。
  • removedItems JumpListItem[]类型 - JumpListItem对象类型的数组,JumpListItem对象对应的项是已经明确的从跳转列表中被用户删除的。这些项一定不能在下一次调用app.setJumpList()时被重新加入到跳转列表中,否则Windows将不会展示任何包含了删除项的内容。

<h3 id="app-setJumpList">app.setJumpList(categories) <i>(Windows)</i></h3>

  • categories JumpListCategory[]类型或者为null - JumpListCategory类型的对象的数组。

设置或者删除一个应用程序中的自定义跳转列表,并且会返回一下字符串之一:

  • ok - 没有出错。
  • error - 发生了一个或者多个错误,运行日志能够可能造成的原因。
  • invalidSeparatorError - 试图将一个分隔符加入到跳转列表的自定义部分。分隔符只允许在标准的Tasks部分中添加。
  • fileTypeRegistrationError - 试图将一个应用程序没有注册可以处理的文件类型添加到跳转列表中。
  • customCategoryAccessDeniedError - 由于设置用户隐私或者群组策略而不能添加到自定义跳转列表中。

如果categoriesnull,之前设置的自定义跳转列表(如果有的话)将会被重新添加到应用程序的跳转列表中(Windows自动管理)。

注意:如果一个JumpListCategory对象没有设置type属性和name属性,那么type属性将会被假设为tasks。如果name属性被设置而type属性没有被设置,那么type属性将被假设为custom

注意:用户可以从自定义的列表中移除项,Windows将不允许一个被移除的项重新添加回一个自定义列表,直到下次成功调用app.setJumpList(categories).之后。任何试图重新添加一个之前移除的项到一个自定义列表中的操作都将会被跳转列表忽略。获得列表中已经删除的项请使用app.getJumpListSettings()

这里有一个创建自定义列表的非常简单的例子:

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',
                icon: process.execPath,
                iconIndex: 0,
                description: 'Runs Tool A'
            },
            {
                type: 'task',
                title: 'Tool B',
                program: process.execPath,
                args: '--run-tool-b',
                icon: 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'
            }
        ]
    }
])

<h3 id="app-makeSingleInstance">app.makeSingleInstance(callback)</h3>

  • callback Function类型
    • argv String[]类型 - 第二实例的命令行参数数组
    • workingDirectory String类型 - 第二实例的工作目录

这个方法使你的应用程序变成一个单例应用程序而不允许多个你的应用程序的实例运行,这个方法将会确保你的应用程序只有一个实例在运行,并且其他的实例会发送信息到这个实例上并且退出。

当第二实例被运行的时候callback会被callback(argv, workingDirectory)调用。argv是第二实例的命令行参数的数组,workingDirectory是第二实例当前工作的目录。通常应用程序响应这个回掉来使得它们的第一窗口聚焦并且取消最小化。

callback一定在app分发ready事件之后被执行。

如果你操作的进程是应用程序的第一实例,则这个方法返回false并且你的应用会继续加载。如果你操作的进程已经发送参数给其他的实例,那么将会返回true,并且你需要立即退出这个实例。

MacOS中,当用户尝试在Finder中打开一个你应用程序的第二实例时系统会自动的强制执行单例模式,并且open-fileopen-url事件将会被分发。然而,当用户在命令行中启动你的应用程序时将会绕过系统的单例机制,你需要使用这个方法确保执行单粒模式。

一个当第二实例启动时第一实例的窗口活动例子:

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

const shouldQuit = app.makeSingleInstance((commandLine, workingDirectory) => {
    // Someone tried to run a second instance, we should focus our window.
    if (myWindow) {
        if (myWindow.isMinimized()) myWindow.restore()
            myWindow.focus()
    }
})

if (shouldQuit) {
    app.quit()
}

// Create myWindow, load the rest of the app, etc...
app.on('ready', () => {
})

<h3 id="app-releaseSingleInstance">app.releaseSingleInstance()</h3>

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

<h3 id="app-setUserActivity">app.setUserActivity(type, userInfo[, webpageURL]) <i>(MacOS)</i></h3>

  • type String类型 - 活动的唯一标识。对应NSUserActivity.activityType
  • userInfo Object类型 - App-specific state to store for use by another device.
  • webpageURL String类型(可选参数)- The webpage to load in a browser if no suitable app is installed on the resuming device. The scheme must be http or https.

创建一个NSUserActivity并且将它设置为当前的活动。这个活动是有资格在以后Handoff到其他设备的。

<h3 id="app-getCurrentActivityType">app.getCurrentActivityType() <i>(MacOS)</i></h3>

返回值为String类型 - 当前正在运行的活动的类型。

<h3 id="app-setAppUserModelId">app.setAppUserModelId(id) <i>(Windows)</i></h3>

  • id String类型

使用参数id更改Application User Model ID

<h3 id="app-importCertificate">app.importCertificate(options, callback) <i>(Linux)</i></h3>

  • options Object类型
    • certificate String类型 - pkcs12文件的路径。
    • password String类型 - 证书的密码。
  • callback Function类型
    • result Integer类型 - 引用结果。

引用pkcs12类型的证书到到平台证书存储中。引用操作之后会将result传入调用callback,根据chromium的net_error_list,值为0时代表成功,其他任何值都代表失败。

<h3 id="app-disableHardwareAcceleration">app.disableHardwareAcceleration()</h3>

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

这个方法只能在应用准备之前调用。

<h3 id="app-setBadgeCount">app.setBadgeCount(count) <i>(MacOS,Linux)</i></h3>

  • count Integer类型

返回值为Boolean类型 - 是否调用成功。

给当前应用设置计数标识。设置为0将会隐藏这个标识。

MacOS中它将展示在dock的图标上。Linux中它只在Unity的启动器上工作。

注意:Unity启动器需要一个.desktop文件的实例才能工作,查看更多信息请阅读Desktop Environment Integration

<h3 id="app-getBadgeCount">app.getBadgeCount() <i>(MacOS,Linux)</i></h3>

返回值是Integer类型 - 当前展示的计数标识的值。

<h3 id="app-isUnityRunning">app.isUnityRunning() <i>(Linux)</i></h3>

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

<h3 id="app-getLoginItemSettings">app.getLoginItemSettings([options]) <i>(MacOS,Windows)</i></h3>

  • options Object类型(可选参数)
    • path String类型(可选参数)Windows可用 - 与之前的可执行文件的目录相比较。默认是process.execPath
    • args String类型 Windows可用 - 与之前的命令行参数相比较。默认是空数组。

如果你给app.setLoginItemSettings提供pathargs选项 那么你需要通过同样的参数来正确的设置openAtLogin

返回值为Object类型:

  • openAtLogin Boolean类型 - 如果应用在登录系统时打开则是true
  • openAsHidden Boolean类型 - 如果应用在登录系统时隐藏模式打开则是true。这个设置只有MacOS支持。
  • wasOpenedAtLogin Boolean类型 - 如果应用在登录系统时已经自动打开则是true。这个设置只有MacOS支持。
  • wasOpenedAsHidden Boolean类型 - 如果应用在作为一个隐藏启动项打开则是true。这表示应用在启动时并没有打开任何窗口。这个设置只有MacOS支持。
  • restoreState Boolean类型 - 如果应用作为一个登录项已经被打开并且需要恢复之前的会话状态则是true。这表示应用需要恢复最近一次关闭应用时打开的窗口。这个设置只有MacOS支持。

注意:这个接口在MAS builds上是没有效果的。

<h3 id="app-setLoginItemSettings">app.setLoginItemSettings(settings[, path, args]) <i>(MacOS,Windows)</i></h3>

  • settings Object类型
    • openAtLogin Boolean类型(可选参数)- true为设置应用在登录系统时打开,false则将应用从登录启动项中移除。默认是false
    • openAsHidden Boolean类型(可选参数)- true为设置应用隐藏打开。默认为false。用户可以从系统偏好设置中设置这个选项,所以当应用被打开时需要检查app.getLoginItemStatus().wasOpenedAsHidden来获取这个选项的当前值。这个设置仅有MacOS支持。
    • path String类型(可选参数)Windows可用 - 登录时启动的可执行文件的路径。默认为process.execPath
    • args String类型 Windows可用 - 传递给可执行文件的命令行参数。默认为空的数组。注意使用引号包裹路径。

设置应用的登录选项。

Windows中和Electron的autoUpdater一起工作,which uses Squirrel,你将想要设置Update.exe的启动路径,并且通过参数指定你的应用名称。例如:

const appFolder = path.dirname(process.execPath)
const updateExe = path.resolve(appFolder, '..', 'Update.exe')
const exeName = path.basename(process.execPath)

app.setLoginItemSettings({
    openAtLogin: true,
    path: updateExe,
    args: [
        '--processStart', `"${exeName}"`,
        '--process-start-args', `"--hidden"`
    ]
})

注意:这个接口在MAS builds上是没有效果的。

<h3 id="app-isAccessibilitySupportEnabled">app.isAccessibilitySupportEnabled() <i>(MacOS,Windows)</i></h3>

返回值为Boolean类型 - 如果Chrome的辅助功能被开启则是truefalse则是尚未开启。如果检测到使用了辅助技术,比如屏幕阅读,这个接口将会返回true。详细请见https://www.chromium.org/developers/design-documents/accessibility

<h3 id="app-setAboutPanelOptions">app.setAboutPanelOptions(options) <i>(MacOS)</i></h3>

  • options Object类型
    • applicationName String类型(可选参数)- 应用的名字。
    • applicationVersion String类型(可选参数)- 应用的版本。
    • copyright String类型(可选参数)- Copyright信息。
    • credits String类型(可选参数)- 信用信息。
    • version String类型(可选参数)- 应用的开发版本号。

设置关于面板的选项。这将会覆盖应用的.plist文件中的定义的值。查看Apple docs获取更多信息。

<h3 id="app-commandLine-appendSwitch">app.commandLine.appendSwitch(switch[, value])</h3>

  • switch String类型 - 一个命令行开关
  • value String类型(可选参数)- 传给开关的值

给Chromium命令行添加一个开关(使用value参数)。

注意:这将不会影响process.argv,通常使用这个方法控制一些底层的Chromium行为。

<h3 id="app-commandLine-appendArgument">app.commandLine.appendArgument(value)</h3>

  • value String类型 - 这个参数将会被加入到命令行中。

添加一个参数到Chromium的命令行。这个参数将会被正确的引用。

注意:这将不会影响process.argv

<h3 id="app-dock-bounce">app.dock.bounce([type]) <i>(MacOS)</i></h3>

  • type String类型(可选参数)- 可以是critical或者informational。默认是informational

设置为critical时,dock的图标将会不断跳动,直到这个应用被激活或者请求被取消。

设置为informational时,dock的图标将跳动一秒。然而这个请求一直有效,直到这个应用被激活或者请求被取消。

返回值为代表着请求的Integer类型的ID。

<h3 id="app-dock-cancelBounce">app.dock.cancelBounce(id) <i>(MacOS)</i></h3>

  • id Integer类型

通过id来取消跳动。

<h3 id="app-dock-downloadFinished">app.dock.downloadFinished(filePath) <i>(MacOS)</i></h3>

  • filePath String类型

如果filePath指向的是Downloads文件夹则会使下载图标跳动。

<h3 id="app-dock-setBadge">app.dock.setBadge(text) <i>(MacOS)</i></h3>

  • text String类型

设置在dock区域显示的字符串。

<h3 id="app-dock-getBadge">app.dock.getBadge() <i>(MacOS)</i></h3>

返回值为String类型 - dock区域显示的字符串。

<h3 id="app-dock-hide">app.dock.hide() <i>(MacOS)</i></h3>

隐藏dock上的图标。

<h3 id="app-dock-show">app.dock.show() <i>(MacOS)</i></h3>

展示dock上的图标。

<h3 id="app-dock-isVisible">app.dock.isVisible() <i>(MacOS)</i></h3>

返回值为Boolean类型 - dock上的图标是否可见。app.dock.show()是异步调用,所以可能不会在调用后立刻返回结果。

<h3 id="app-dock-setMenu">app.dock.setMenu(menu) <i>(MacOS)</i></h3>

  • menu Menu类型

设置应用的dock菜单

<h3 id="app-dock-setIcon">app.dock.setIcon(image) <i>(MacOS)</i></h3>

  • image (NativeImage | String)

设置应用在dock中的图标。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容