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閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容