原文: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-file
和open-url
事件的監(jiān)聽擂错,并且開始記錄崩潰日志和自動(dòng)更新缕陕。
大多數(shù)情況下粱锐,你只需要在ready
事件回調(diào)中做所有事情。
<h3 id="event-">事件:‘ready’</h3>
返回值:
-
launchInfo
Object類型(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)證url
的certificate
時(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è)方法保證了所有beforeunload
和unload
事件的回調(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部分溪椎。
tasks
是Task
類型的對(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)列表中拯啦。
如果categories
是null
澡匪,之前設(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-file
和open-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
提供path
和args
選項(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的輔助功能被開啟則是true
,false
則是尚未開啟四濒。如果檢測(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)毫目。