1. app

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

控制你應(yīng)用程序的生命周期事件

進(jìn)程:主進(jìn)程

下面的例子將展示如何在最后一個(gè)窗口被關(guān)閉時(shí)關(guān)閉應(yīng)用程序径荔。

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

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

app對(duì)象會(huì)分發(fā)下面的事件。

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

應(yīng)用程序完成基本的啟動(dòng)時(shí)分發(fā)。Windows和Linux下碧注,will-finish-launching事件和ready事件是相同的元暴;macOS下,這個(gè)事件代表了NSApplication中的applicationWillFinishLaunching通知。你通常會(huì)在這里設(shè)置open-fileopen-url事件的監(jiān)聽擂错,并且開始記錄崩潰日志和自動(dòng)更新缕陕。

大多數(shù)情況下粱锐,你只需要在ready事件回調(diào)中做所有事情。

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

  • launchInfoObject類型(macOS)

Electron完成初始化時(shí)分發(fā)事件扛邑。MacOS中怜浅,launchInfo包含了NSUserNotification中用來打開應(yīng)用程序的userInfo,如果它從通知中心被分發(fā)蔬崩。如果這個(gè)事件被分發(fā)你可以調(diào)用app.isReady()檢查恶座。

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

當(dāng)所有窗口都被關(guān)閉時(shí)分發(fā)此事件。

如果你沒有訂閱這個(gè)事件沥阳,那么當(dāng)所有窗口都被關(guān)閉時(shí)默認(rèn)行為是退出應(yīng)用程序跨琳;然而,如果你訂閱了桐罕,你可以控制是否退出應(yīng)用程序脉让。如果用戶按Cmd + Q,或者開發(fā)者調(diào)用app.quit()功炮,Electron將會(huì)首先嘗試關(guān)閉所有窗口溅潜,然后分發(fā)will-quit事件,在這種情況下window-all-closed事件并不會(huì)被分發(fā)死宣。

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

  • event Event類型

應(yīng)用程序開始關(guān)閉窗口之前分發(fā)事件伟恶。調(diào)用event.preventDefault()將阻止終止應(yīng)用程序的默認(rèn)行為。

注意:如果應(yīng)用程序是因?yàn)?code>autoUpdater.quitAndInstall()而退出毅该,那么before-quit將會(huì)在所有窗口分發(fā)close事件并且關(guān)閉所有窗口之后被分發(fā)博秫。

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

  • event Event類型

所有窗口都已經(jīng)關(guān)閉潦牛,應(yīng)用程序?qū)⒁顺龅臅r(shí)候分發(fā)事件。調(diào)用event.preventDefault()將阻止終止應(yīng)用程序的默認(rèn)行為挡育。

查看window-all-closed事件和will-quit and window-all-closed事件描述上的區(qū)別巴碗。

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

  • event Event類型
  • exitCode Integer類型

應(yīng)用程序正在退出時(shí)被分發(fā)。

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

  • event Event類型
  • path String類型

用戶想要使用應(yīng)用程序打開一個(gè)文件時(shí)被分發(fā)即寒。open-file事件通常在應(yīng)用程序已經(jīng)打開并且系統(tǒng)想要應(yīng)用程序重新文件時(shí)分發(fā)橡淆。open-file也在一個(gè)文件拖入到dock并且應(yīng)用程序尚未運(yùn)行時(shí)被分發(fā)。請(qǐng)確認(rèn)非常早的監(jiān)聽open-file事件母赵,以便在你應(yīng)用程序啟動(dòng)時(shí)能夠處理這個(gè)事件(甚至?xí)?code>ready事件分發(fā)之前就會(huì)出現(xiàn))逸爵。

如果你想要處理這個(gè)事件,你需要調(diào)用event.preventDefault()凹嘲。

Windows中师倔,你需要分析process.argv(在主進(jìn)程中)來得到文件路徑。

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

  • event Event類型
  • url String類型

當(dāng)用戶想要使用應(yīng)用程序打開一個(gè)地址時(shí)被分發(fā)周蹭。你的應(yīng)用程序的Info.plist文件必須使用CFBundleURLTypes鍵定義url體系趋艘,并且在AtomApplication中設(shè)置NSPrincipalClass

如果你想要處理這個(gè)事件凶朗,你需要調(diào)用event.preventDefault()瓷胧。

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

  • event Event類型
  • hasVisibleWindows Boolean類型

當(dāng)用戶點(diǎn)擊應(yīng)用程序在dock上的圖標(biāo)導(dǎo)致應(yīng)用程序被激活時(shí)分發(fā)。

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

  • event Event類型
  • type String類型 - A string identifying the activity棚愤。對(duì)應(yīng)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. 如果你想要處理這個(gè)事件,你需要調(diào)用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類型

當(dāng)一個(gè)browserWindow失去焦點(diǎn)的時(shí)候被分發(fā)矛绘。

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

  • event Event類型
  • window BrowserWindow類型

當(dāng)一個(gè)browserWindow獲得焦點(diǎn)的時(shí)候被分發(fā)。

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

  • event Event類型
  • window BrowserWindow類型

當(dāng)一個(gè)新的browserWindow被創(chuàng)建的時(shí)候被分發(fā)刃永。

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

  • event Event類型
  • webContents WebContents類型
  • url String類型
  • error String類型 - 錯(cuò)誤代碼
  • certificate Certificate類型
  • callback Function類型
    • isTrusted Boolean類型 - 證書是否是可信的

無法驗(yàn)證urlcertificate時(shí)被分發(fā),如果想要相信這個(gè)證書羊精,并且你需要阻止默認(rèn)行為你需要調(diào)用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類型(可選參數(shù))

請(qǐng)求客戶端證書時(shí)被分發(fā)。

url對(duì)應(yīng)的是請(qǐng)求客戶端證書的導(dǎo)航記錄喧锦,callback被調(diào)用并且傳入從列表中過濾的記錄读规。使用event.preventDefault()阻止應(yīng)用程序使用保存的第一個(gè)證書。

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想要做基本認(rèn)證(auth)時(shí)被分發(fā)燃少。

默認(rèn)行為是取消所有認(rèn)證束亏,想要重寫你需要調(diào)用event.preventDefault()阻止默認(rèn)行為,并且使用證書中的數(shù)據(jù)調(diào)用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類型

當(dāng)GPU進(jìn)程崩潰或者被殺死時(shí)被分發(fā)碍遍。

<h3 id="event-accessibility-support-changed">事件:‘a(chǎn)ccessibility-support-changed’ <i>(MacOS定铜,Windows)</i></h3>
返回值:

  • event Event類型
  • accessibilitySupportEnabled Boolean類型 - true是Chrome的accessibility支持被開啟,false則是被停用怕敬。

當(dāng)Chrome的accessibility支持改變時(shí)被分發(fā)揣炕。這個(gè)事件在殘疾人輔助功能,如屏幕閱讀器被啟用或停用時(shí)觸發(fā)东跪。詳情見https://www.chromium.org/developers/design-documents/accessibility畸陡。

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

app對(duì)象有以下方法:

注意:某些方法只適用于特定的操作系統(tǒng),已經(jīng)被標(biāo)記虽填。

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

嘗試關(guān)閉所有窗口丁恭。before-quit事件將首先被分發(fā)。如果所有窗口都被成功的關(guān)閉則will-quit事件將會(huì)被分發(fā)斋日,并且默認(rèn)情況下應(yīng)用程序?qū)?huì)被終止涩惑。

這個(gè)方法保證了所有beforeunloadunload事件的回調(diào)被正確的執(zhí)行。有可能在某個(gè)窗口取消退出并且在beforeunload事件中返回false桑驱。

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

  • exitCode Integer類型(可選參數(shù))

傳入?yún)?shù)exitCode立即退出竭恬。exitCode默認(rèn)為0。

除非告訴用戶否則所有窗口立刻關(guān)閉熬的,并且before-quit事件和will-quit事件將不會(huì)被分發(fā)痊硕。

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

  • options Object類型(可選參數(shù))
    • args String[]類型 -(可選參數(shù))
    • execPath String類型(可選參數(shù))

當(dāng)前應(yīng)用實(shí)例被退出之后重載應(yīng)用。

默認(rèn)情況下押框,新的實(shí)例將會(huì)使用同樣的工作目錄和當(dāng)前實(shí)例的命令行參數(shù)岔绸。當(dāng)args參數(shù)被設(shè)置時(shí),args參數(shù)將會(huì)被用來替代 命令行參數(shù)橡伞。當(dāng)execPath參數(shù)被設(shè)置時(shí)盒揉,execPath參數(shù)將會(huì)被用來在重載替代當(dāng)前應(yīng)用。

請(qǐng)注意兑徘,這個(gè)方法執(zhí)行時(shí)不能退出應(yīng)用刚盈,你需要在調(diào)用app.relaunch使應(yīng)用重新運(yùn)行之后再調(diào)用app.quit或者app.exit
當(dāng)app.relaunch被多次調(diào)用挂脑,多個(gè)實(shí)例將會(huì)在當(dāng)前實(shí)例退出之后運(yùn)行藕漱。

一個(gè)立即重新啟動(dòng)當(dāng)前實(shí)例并且添加新的命令行參數(shù)到新實(shí)例的例子:

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已經(jīng)完成初始化,如果是false則表示尚未完成初始化崭闲。

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

Linux中肋联,聚焦在第一個(gè)可見的窗口。MacOS中刁俭,使得應(yīng)用程序變成激活狀態(tài)的應(yīng)用程序橄仍。Windows中,聚焦在應(yīng)用程序的第一個(gè)窗口。

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

隱藏所有應(yīng)用程序的窗口侮繁,而不是最小化它們虑粥。

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

顯示隱藏后的應(yīng)用程序窗口。但不會(huì)自動(dòng)聚焦它們鼎天。

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

返回值為String類型 - 當(dāng)前應(yīng)用程序的目錄舀奶。

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

  • name String類型

返回值為String類型 - 指定目錄或文件的整體路徑。如果發(fā)生故障將會(huì)拋出一個(gè)錯(cuò)誤斋射。

你可以通過名字請(qǐng)求以下的路徑:

  • home 用戶的主頁目錄
  • appData 每個(gè)用戶應(yīng)用程序數(shù)據(jù)目錄育勺,默認(rèn)情況下指向下面的路徑:
    • %APPDATA% 在Windows中
    • $XDG_CONFIG_HOME或者~/.config 在Linux中
    • ~/Library/Application Support 在macOS中
  • userData 存儲(chǔ)你的應(yīng)用程序配置文件的目錄,默認(rèn)情況下是appData`目錄加上你的應(yīng)用名稱罗岖。
  • temp 臨時(shí)文件目錄涧至。
  • exe 當(dāng)前可執(zhí)行文件。
  • module libchromiumcontent庫桑包。
  • desktop 當(dāng)前用戶桌面目錄南蓬。
  • documents 用戶的“我的文檔”的目錄。
  • downloads 用戶的下載目錄哑了。
  • music 用戶的音樂目錄赘方。
  • pictures 用戶的圖片目錄。
  • videos 用戶的視頻目錄弱左。
  • pepperFlashSystemPlugin Pepper Flash插件在當(dāng)前系統(tǒng)版本中的完整路徑窄陡。

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

  • name String類型
  • path String類型

使用指定的文件夾或者文件重寫指定的name對(duì)應(yīng)的路徑。如果指定的文件夾不存在那么這個(gè)方法將自動(dòng)創(chuàng)建這個(gè)文件夾拆火。如果發(fā)生故障將會(huì)拋出一個(gè)錯(cuò)誤跳夭。

你只能重寫app.getPath中定義的name對(duì)應(yīng)的路徑。

默認(rèn)情況下们镜,網(wǎng)頁的cookies和緩存將會(huì)被存儲(chǔ)在userData目錄下币叹。如果你想要改變這個(gè)本地路徑,你需要在ready事件被app模塊分發(fā)之前重寫userData對(duì)應(yīng)的路徑模狭。

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

R返回值為String類型 - 已經(jīng)加載的應(yīng)用程序的版本號(hào)颈抚。如果在package.json文件內(nèi)沒有發(fā)現(xiàn)應(yīng)用程序的版本號(hào),那么就會(huì)返回當(dāng)前包或者可執(zhí)行文件的版本號(hào)胞皱。

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

返回值為String類型 - 寫在應(yīng)用程序package.json文件中的當(dāng)前應(yīng)用程序的名字邪意。

通常根據(jù)npm 模塊說明,package.json中的name字段是短的小寫名稱反砌。你通常都需要指定一個(gè)productName字段,這個(gè)字段是你應(yīng)用程序的全部大寫的名字萌朱,這個(gè)字段的名字Electron將會(huì)作為首選名稱宴树。

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

  • name String類型

重寫當(dāng)前應(yīng)用程序的名字。

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

返回值為String類型 - 當(dāng)前應(yīng)用程序的本地路徑晶疼【票幔可能的返回值都將會(huì)被記錄在這里又憨。

注意:當(dāng)發(fā)布你的打包好的應(yīng)用時(shí),你需要發(fā)送到本地文件夾锭吨。

注意:Windows中你需要在ready事件被分發(fā)之后調(diào)用它蠢莺。

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

  • path String類型

添加路徑到最近使用的文檔列表零如。

這個(gè)列表由系統(tǒng)管理躏将。Windows中你可以在任務(wù)欄查看這個(gè)列表,macOS中你可以在dock菜單中查看這個(gè)列表考蕾。

<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類型 - 你的協(xié)議的名字蚯窥,不包含://。如果你想要你的應(yīng)用處理electron://鏈接塞帐,則使用electron作為參數(shù)來調(diào)用這個(gè)方法拦赠。
  • path String類型(可選參數(shù)) Windows可用 - 默認(rèn)為process.execPath
  • args String[]類型(可選參數(shù))Windows可用 - 默認(rèn)為空數(shù)組

返回值為Boolean類型 - 是否調(diào)用成功。

這個(gè)方法設(shè)置當(dāng)前的可執(zhí)行文件的默認(rèn)處理協(xié)議(又名URI方案)葵姥。它將允許你集成的應(yīng)用程序到系統(tǒng)的更深層次中荷鼠。注冊(cè)一次,所有的your-protocol://鏈接都將會(huì)使用當(dāng)前的可執(zhí)行文件打開牌里。

Windows中你可以提供可選的path參數(shù)颊咬,路徑指向的可執(zhí)行文件,當(dāng)可執(zhí)行文件啟動(dòng)時(shí)牡辽,args中的數(shù)組參數(shù)將會(huì)被傳遞到那個(gè)可執(zhí)行文件中喳篇。

注意:MacOS中你只能注冊(cè)已經(jīng)添加到你的應(yīng)用程序的info.plist文件中的協(xié)議,是不可以在運(yùn)行時(shí)間內(nèi)更改的态辛。然而你可以在編譯的時(shí)候使用一個(gè)簡單的文本編輯器或腳本來更改它麸澜。詳情請(qǐng)參閱Apple’s documentation

這個(gè)接口使用Windows Registry和LSSetDefaultHandlerForURLScheme內(nèi)核奏黑。

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

  • rotocol String類型 - 你的協(xié)議的名字,不包含://熟史。
  • path String類型(可選參數(shù))Windows可用 - 默認(rèn)為process.execPath
  • args String[]類型(可選參數(shù))Windows可用 - 默認(rèn)為空數(shù)組

返回值為Boolean類型 - 是否調(diào)用成功馁害。

這個(gè)方法檢查當(dāng)前可執(zhí)行文件是否會(huì)默認(rèn)處理一個(gè)協(xié)議(又名URI方案)。如果會(huì)處理蹂匹,將從應(yīng)用中移除這個(gè)默認(rèn)處理碘菜。

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

  • protocol String類型 - 你的協(xié)議的名字,不包含://忍啸。
  • path String類型(可選參數(shù))Windows可用 - 默認(rèn)為process.execPath
  • args String[]類型(可選參數(shù))Windows可用 - 默認(rèn)為空數(shù)組

返回值為Boolean類型仰坦。

這個(gè)方法檢查當(dāng)前可執(zhí)行文件是否會(huì)默認(rèn)處理一個(gè)協(xié)議(又名URI方案)。如果會(huì)處理计雌,將會(huì)返回true悄晃,否則將會(huì)返回false

注意:MacOS中凿滤,如果這個(gè)應(yīng)用程序已經(jīng)注冊(cè)了默認(rèn)處理的協(xié)議妈橄,則你可以使用這個(gè)方法檢查。你也可以通過macOS機(jī)器中的~/Library/Preferences/com.apple.LaunchServices.plist文件來檢查鸭巴。詳情請(qǐng)參閱Apple’s documentation眷细。

這個(gè)接口使用Windows Registry和LSSetDefaultHandlerForURLScheme內(nèi)核。

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

  • tasks Task[]類型 - Task類型的對(duì)象的數(shù)組鹃祖。

Windows中添加tasks到跳轉(zhuǎn)列表的Tasks部分溪椎。

tasksTask類型的對(duì)象的數(shù)組。

返回值為Boolean類型 - 是否調(diào)用成功恬口。

注意:如果你想要自定義更多關(guān)于跳轉(zhuǎn)列表的內(nèi)容粱坤,請(qǐng)使用app.setJumpList(categories)蝇完。

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

返回值為Object類型:

  • minItems Integer類型 - 將在跳轉(zhuǎn)列表中展示的項(xiàng)目的最小數(shù)量(關(guān)于這個(gè)值的更詳細(xì)的描述請(qǐng)看MSDN docs)。
  • removedItems JumpListItem[]類型 - JumpListItem對(duì)象類型的數(shù)組,JumpListItem對(duì)象對(duì)應(yīng)的項(xiàng)是已經(jīng)明確的從跳轉(zhuǎn)列表中被用戶刪除的动遭。這些項(xiàng)一定不能在下一次調(diào)用app.setJumpList()時(shí)被重新加入到跳轉(zhuǎn)列表中烤礁,否則Windows將不會(huì)展示任何包含了刪除項(xiàng)的內(nèi)容悠菜。

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

  • categories JumpListCategory[]類型或者為null - JumpListCategory類型的對(duì)象的數(shù)組戒悠。

設(shè)置或者刪除一個(gè)應(yīng)用程序中的自定義跳轉(zhuǎn)列表,并且會(huì)返回一下字符串之一:

  • ok - 沒有出錯(cuò)钞螟。
  • error - 發(fā)生了一個(gè)或者多個(gè)錯(cuò)誤兔甘,運(yùn)行日志能夠可能造成的原因。
  • invalidSeparatorError - 試圖將一個(gè)分隔符加入到跳轉(zhuǎn)列表的自定義部分鳞滨。分隔符只允許在標(biāo)準(zhǔn)的Tasks部分中添加洞焙。
  • fileTypeRegistrationError - 試圖將一個(gè)應(yīng)用程序沒有注冊(cè)可以處理的文件類型添加到跳轉(zhuǎn)列表中。
  • customCategoryAccessDeniedError - 由于設(shè)置用戶隱私或者群組策略而不能添加到自定義跳轉(zhuǎn)列表中拯啦。

如果categoriesnull澡匪,之前設(shè)置的自定義跳轉(zhuǎn)列表(如果有的話)將會(huì)被重新添加到應(yīng)用程序的跳轉(zhuǎn)列表中(Windows自動(dòng)管理)。

注意:如果一個(gè)JumpListCategory對(duì)象沒有設(shè)置type屬性和name屬性褒链,那么type屬性將會(huì)被假設(shè)為tasks唁情。如果name屬性被設(shè)置而type屬性沒有被設(shè)置,那么type屬性將被假設(shè)為custom甫匹。

注意:用戶可以從自定義的列表中移除項(xiàng)荠瘪,Windows將不允許一個(gè)被移除的項(xiàng)重新添加回一個(gè)自定義列表夯巷,直到下次成功調(diào)用app.setJumpList(categories).之后赛惩。任何試圖重新添加一個(gè)之前移除的項(xiàng)到一個(gè)自定義列表中的操作都將會(huì)被跳轉(zhuǎn)列表忽略哀墓。獲得列表中已經(jīng)刪除的項(xiàng)請(qǐng)使用app.getJumpListSettings()

這里有一個(gè)創(chuàng)建自定義列表的非常簡單的例子:

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[]類型 - 第二實(shí)例的命令行參數(shù)數(shù)組
    • workingDirectory String類型 - 第二實(shí)例的工作目錄

這個(gè)方法使你的應(yīng)用程序變成一個(gè)單例應(yīng)用程序而不允許多個(gè)你的應(yīng)用程序的實(shí)例運(yùn)行喷兼,這個(gè)方法將會(huì)確保你的應(yīng)用程序只有一個(gè)實(shí)例在運(yùn)行篮绰,并且其他的實(shí)例會(huì)發(fā)送信息到這個(gè)實(shí)例上并且退出。

當(dāng)?shù)诙?shí)例被運(yùn)行的時(shí)候callback會(huì)被callback(argv, workingDirectory)調(diào)用季惯。argv是第二實(shí)例的命令行參數(shù)的數(shù)組吠各,workingDirectory是第二實(shí)例當(dāng)前工作的目錄。通常應(yīng)用程序響應(yīng)這個(gè)回掉來使得它們的第一窗口聚焦并且取消最小化勉抓。

callback一定在app分發(fā)ready事件之后被執(zhí)行贾漏。

如果你操作的進(jìn)程是應(yīng)用程序的第一實(shí)例,則這個(gè)方法返回false并且你的應(yīng)用會(huì)繼續(xù)加載藕筋。如果你操作的進(jìn)程已經(jīng)發(fā)送參數(shù)給其他的實(shí)例纵散,那么將會(huì)返回true,并且你需要立即退出這個(gè)實(shí)例隐圾。

MacOS中伍掀,當(dāng)用戶嘗試在Finder中打開一個(gè)你應(yīng)用程序的第二實(shí)例時(shí)系統(tǒng)會(huì)自動(dòng)的強(qiáng)制執(zhí)行單例模式,并且open-fileopen-url事件將會(huì)被分發(fā)暇藏。然而蜜笤,當(dāng)用戶在命令行中啟動(dòng)你的應(yīng)用程序時(shí)將會(huì)繞過系統(tǒng)的單例機(jī)制,你需要使用這個(gè)方法確保執(zhí)行單粒模式盐碱。

一個(gè)當(dāng)?shù)诙?shí)例啟動(dòng)時(shí)第一實(shí)例的窗口活動(dòng)例子:

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創(chuàng)建的鎖把兔。這將允許應(yīng)用程序的多個(gè)實(shí)例再一次并排運(yùn)行。

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

  • type String類型 - 活動(dòng)的唯一標(biāo)識(shí)瓮顽。對(duì)應(yīng)NSUserActivity.activityType县好。
  • userInfo Object類型 - App-specific state to store for use by another device.
  • webpageURL String類型(可選參數(shù))- The webpage to load in a browser if no suitable app is installed on the resuming device. The scheme must be http or https.

創(chuàng)建一個(gè)NSUserActivity并且將它設(shè)置為當(dāng)前的活動(dòng)。這個(gè)活動(dòng)是有資格在以后Handoff到其他設(shè)備的趣倾。

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

返回值為String類型 - 當(dāng)前正在運(yùn)行的活動(dòng)的類型聘惦。

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

  • id String類型

使用參數(shù)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類型 - 引用結(jié)果。

引用pkcs12類型的證書到到平臺(tái)證書存儲(chǔ)中诫尽。引用操作之后會(huì)將result傳入調(diào)用callback禀酱,根據(jù)chromium的net_error_list,值為0時(shí)代表成功牧嫉,其他任何值都代表失敗剂跟。

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

禁用當(dāng)前應(yīng)用的硬件加速减途。

這個(gè)方法只能在應(yīng)用準(zhǔn)備之前調(diào)用。

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

  • count Integer類型

返回值為Boolean類型 - 是否調(diào)用成功鳍置。

給當(dāng)前應(yīng)用設(shè)置計(jì)數(shù)標(biāo)識(shí)。設(shè)置為0將會(huì)隱藏這個(gè)標(biāo)識(shí)送淆。

MacOS中它將展示在dock的圖標(biāo)上税产。Linux中它只在Unity的啟動(dòng)器上工作。

注意:Unity啟動(dòng)器需要一個(gè).desktop文件的實(shí)例才能工作偷崩,查看更多信息請(qǐng)閱讀Desktop Environment Integration辟拷。

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

返回值是Integer類型 - 當(dāng)前展示的計(jì)數(shù)標(biāo)識(shí)的值阐斜。

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

返回值為Boolean - 當(dāng)前的桌面面環(huán)境是否為Unity啟動(dòng)器衫冻。

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

  • options Object類型(可選參數(shù))
    • path String類型(可選參數(shù))Windows可用 - 與之前的可執(zhí)行文件的目錄相比較谒出。默認(rèn)是process.execPath隅俘。
    • args String類型 Windows可用 - 與之前的命令行參數(shù)相比較。默認(rèn)是空數(shù)組到推。

如果你給app.setLoginItemSettings提供pathargs選項(xiàng) 那么你需要通過同樣的參數(shù)來正確的設(shè)置openAtLogin考赛。

返回值為Object類型:

  • openAtLogin Boolean類型 - 如果應(yīng)用在登錄系統(tǒng)時(shí)打開則是true
  • openAsHidden Boolean類型 - 如果應(yīng)用在登錄系統(tǒng)時(shí)隱藏模式打開則是true莉测。這個(gè)設(shè)置只有MacOS支持颜骤。
  • wasOpenedAtLogin Boolean類型 - 如果應(yīng)用在登錄系統(tǒng)時(shí)已經(jīng)自動(dòng)打開則是true。這個(gè)設(shè)置只有MacOS支持捣卤。
  • wasOpenedAsHidden Boolean類型 - 如果應(yīng)用在作為一個(gè)隱藏啟動(dòng)項(xiàng)打開則是true忍抽。這表示應(yīng)用在啟動(dòng)時(shí)并沒有打開任何窗口。這個(gè)設(shè)置只有MacOS支持董朝。
  • restoreState Boolean類型 - 如果應(yīng)用作為一個(gè)登錄項(xiàng)已經(jīng)被打開并且需要恢復(fù)之前的會(huì)話狀態(tài)則是true鸠项。這表示應(yīng)用需要恢復(fù)最近一次關(guān)閉應(yīng)用時(shí)打開的窗口。這個(gè)設(shè)置只有MacOS支持子姜。

注意:這個(gè)接口在MAS builds上是沒有效果的祟绊。

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

  • settings Object類型
    • openAtLogin Boolean類型(可選參數(shù))- true為設(shè)置應(yīng)用在登錄系統(tǒng)時(shí)打開哥捕,false則將應(yīng)用從登錄啟動(dòng)項(xiàng)中移除牧抽。默認(rèn)是false
    • openAsHidden Boolean類型(可選參數(shù))- true為設(shè)置應(yīng)用隱藏打開遥赚。默認(rèn)為false扬舒。用戶可以從系統(tǒng)偏好設(shè)置中設(shè)置這個(gè)選項(xiàng),所以當(dāng)應(yīng)用被打開時(shí)需要檢查app.getLoginItemStatus().wasOpenedAsHidden來獲取這個(gè)選項(xiàng)的當(dāng)前值凫佛。這個(gè)設(shè)置僅有MacOS支持讲坎。
    • path String類型(可選參數(shù))Windows可用 - 登錄時(shí)啟動(dòng)的可執(zhí)行文件的路徑孕惜。默認(rèn)為process.execPath
    • args String類型 Windows可用 - 傳遞給可執(zhí)行文件的命令行參數(shù)晨炕。默認(rèn)為空的數(shù)組衫画。注意使用引號(hào)包裹路徑。

設(shè)置應(yīng)用的登錄選項(xiàng)府瞄。

Windows中和Electron的autoUpdater一起工作碧磅,which uses Squirrel,你將想要設(shè)置Update.exe的啟動(dòng)路徑遵馆,并且通過參數(shù)指定你的應(yīng)用名稱。例如:

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"`
    ]
})

注意:這個(gè)接口在MAS builds上是沒有效果的丰榴。

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

返回值為Boolean類型 - 如果Chrome的輔助功能被開啟則是truefalse則是尚未開啟四濒。如果檢測(cè)到使用了輔助技術(shù)换况,比如屏幕閱讀,這個(gè)接口將會(huì)返回true盗蟆。詳細(xì)請(qǐng)見https://www.chromium.org/developers/design-documents/accessibility戈二。

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

  • options Object類型
    • applicationName String類型(可選參數(shù))- 應(yīng)用的名字。
    • applicationVersion String類型(可選參數(shù))- 應(yīng)用的版本喳资。
    • copyright String類型(可選參數(shù))- Copyright信息觉吭。
    • credits String類型(可選參數(shù))- 信用信息。
    • version String類型(可選參數(shù))- 應(yīng)用的開發(fā)版本號(hào)仆邓。

設(shè)置關(guān)于面板的選項(xiàng)鲜滩。這將會(huì)覆蓋應(yīng)用的.plist文件中的定義的值。查看Apple docs獲取更多信息节值。

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

  • switch String類型 - 一個(gè)命令行開關(guān)
  • value String類型(可選參數(shù))- 傳給開關(guān)的值

給Chromium命令行添加一個(gè)開關(guān)(使用value參數(shù))徙硅。

注意:這將不會(huì)影響process.argv,通常使用這個(gè)方法控制一些底層的Chromium行為搞疗。

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

  • value String類型 - 這個(gè)參數(shù)將會(huì)被加入到命令行中嗓蘑。

添加一個(gè)參數(shù)到Chromium的命令行。這個(gè)參數(shù)將會(huì)被正確的引用匿乃。

注意:這將不會(huì)影響process.argv桩皿。

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

  • type String類型(可選參數(shù))- 可以是critical或者informational。默認(rèn)是informational扳埂。

設(shè)置為critical時(shí)业簿,dock的圖標(biāo)將會(huì)不斷跳動(dòng),直到這個(gè)應(yīng)用被激活或者請(qǐng)求被取消阳懂。

設(shè)置為informational時(shí)梅尤,dock的圖標(biāo)將跳動(dòng)一秒柜思。然而這個(gè)請(qǐng)求一直有效,直到這個(gè)應(yīng)用被激活或者請(qǐng)求被取消巷燥。

返回值為代表著請(qǐng)求的Integer類型的ID赡盘。

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

  • id Integer類型

通過id來取消跳動(dòng)。

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

  • filePath String類型

如果filePath指向的是Downloads文件夾則會(huì)使下載圖標(biāo)跳動(dòng)缰揪。

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

  • text String類型

設(shè)置在dock區(qū)域顯示的字符串陨享。

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

返回值為String類型 - dock區(qū)域顯示的字符串。

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

隱藏dock上的圖標(biāo)钝腺。

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

展示dock上的圖標(biāo)抛姑。

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

返回值為Boolean類型 - dock上的圖標(biāo)是否可見。app.dock.show()是異步調(diào)用艳狐,所以可能不會(huì)在調(diào)用后立刻返回結(jié)果定硝。

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

  • menu Menu類型

設(shè)置應(yīng)用的dock菜單

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

  • image (NativeImage | String)

設(shè)置應(yīng)用在dock中的圖標(biāo)毫目。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔬啡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子镀虐,更是在濱河造成了極大的恐慌箱蟆,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刮便,死亡現(xiàn)場離奇詭異空猜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)诺核,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門抄肖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窖杀,你說我怎么就攤上這事漓摩。” “怎么了入客?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵管毙,是天一觀的道長。 經(jīng)常有香客問我桌硫,道長夭咬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任铆隘,我火速辦了婚禮卓舵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膀钠。我一直安慰自己掏湾,他們只是感情好裹虫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著融击,像睡著了一般筑公。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尊浪,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天匣屡,我揣著相機(jī)與錄音,去河邊找鬼拇涤。 笑死捣作,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的工育。 我是一名探鬼主播虾宇,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼如绸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旭贬,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤怔接,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后稀轨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扼脐,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年奋刽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓦侮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佣谐,死狀恐怖肚吏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狭魂,我是刑警寧澤罚攀,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站雌澄,受9級(jí)特大地震影響斋泄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜镐牺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一炫掐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧睬涧,春花似錦募胃、人聲如沸旗唁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逆皮。三九已至,卻和暖如春参袱,著一層夾襖步出監(jiān)牢的瞬間电谣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工抹蚀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剿牺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓环壤,卻偏偏與公主長得像晒来,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子郑现,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容