原文:https://github.com/electron/electron/blob/master/docs/api/app.md
譯者:Lin
控制你應(yīng)用程序的生命周期事件
進(jìn)程:主進(jìn)程
下面的例子將展示如何在最后一個窗口被關(guān)閉時關(guān)閉應(yīng)用程序。
const {app} = require('electron')
app.on('window-all-closed', () => {
app.quit()
})
<h2 id="events">事件</h2>
app對象會分發(fā)下面的事件。
<h3 id="event-">事件:‘will-finish-launching’</h3>
應(yīng)用程序完成基本的啟動時分發(fā)。Windows和Linux下,will-finish-launching事件和ready事件是相同的;macOS下,這個事件代表了NSApplication中的applicationWillFinishLaunching通知。你通常會在這里設(shè)置open-file和open-url事件的監(jiān)聽,并且開始記錄崩潰日志和自動更新。
大多數(shù)情況下,你只需要在ready事件回調(diào)中做所有事情。
<h3 id="event-">事件:‘ready’</h3>
返回值:
-
launchInfoObject類型(macOS)
Electron完成初始化時分發(fā)事件。MacOS中,launchInfo包含了NSUserNotification中用來打開應(yīng)用程序的userInfo,如果它從通知中心被分發(fā)。如果這個事件被分發(fā)你可以調(diào)用app.isReady()檢查。
<h3 id="event-">事件:‘window-all-closed’</h3>
當(dāng)所有窗口都被關(guān)閉時分發(fā)此事件。
如果你沒有訂閱這個事件,那么當(dāng)所有窗口都被關(guān)閉時默認(rèn)行為是退出應(yīng)用程序;然而,如果你訂閱了,你可以控制是否退出應(yīng)用程序。如果用戶按Cmd + Q,或者開發(fā)者調(diào)用app.quit(),Electron將會首先嘗試關(guān)閉所有窗口,然后分發(fā)will-quit事件,在這種情況下window-all-closed事件并不會被分發(fā)。
<h3 id="event-">事件:‘before-quit’</h3>
返回值:
-
eventEvent類型
應(yīng)用程序開始關(guān)閉窗口之前分發(fā)事件。調(diào)用event.preventDefault()將阻止終止應(yīng)用程序的默認(rèn)行為。
注意:如果應(yīng)用程序是因?yàn)?code>autoUpdater.quitAndInstall()而退出,那么before-quit將會在所有窗口分發(fā)close事件并且關(guān)閉所有窗口之后被分發(fā)。
<h3 id="event-">事件:‘will-quit’</h3>
返回值:
-
eventEvent類型
所有窗口都已經(jīng)關(guān)閉,應(yīng)用程序?qū)⒁顺龅臅r候分發(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>
返回值:
-
eventEvent類型 -
exitCodeInteger類型
應(yīng)用程序正在退出時被分發(fā)。
<h3 id="event-open-file">事件:‘open-file’ <i>(MacOS)</i></h3>
返回值:
-
eventEvent類型 -
pathString類型
用戶想要使用應(yīng)用程序打開一個文件時被分發(fā)。open-file事件通常在應(yīng)用程序已經(jīng)打開并且系統(tǒng)想要應(yīng)用程序重新文件時分發(fā)。open-file也在一個文件拖入到dock并且應(yīng)用程序尚未運(yùn)行時被分發(fā)。請確認(rèn)非常早的監(jiān)聽open-file事件,以便在你應(yīng)用程序啟動時能夠處理這個事件(甚至?xí)?code>ready事件分發(fā)之前就會出現(xiàn))。
如果你想要處理這個事件,你需要調(diào)用event.preventDefault()。
Windows中,你需要分析process.argv(在主進(jìn)程中)來得到文件路徑。
<h3 id="event-open-url">事件:‘open-url’ <i>(MacOS)</i></h3>
返回值:
-
eventEvent類型 -
urlString類型
當(dāng)用戶想要使用應(yīng)用程序打開一個地址時被分發(fā)。你的應(yīng)用程序的Info.plist文件必須使用CFBundleURLTypes鍵定義url體系,并且在AtomApplication中設(shè)置NSPrincipalClass。
如果你想要處理這個事件,你需要調(diào)用event.preventDefault()。
<h3 id="event-activate">事件:‘a(chǎn)ctivate’ <i>(MacOS)</i></h3>
返回值:
-
eventEvent類型 -
hasVisibleWindowsBoolean類型
當(dāng)用戶點(diǎn)擊應(yīng)用程序在dock上的圖標(biāo)導(dǎo)致應(yīng)用程序被激活時分發(fā)。
<h3 id="event-continue-activity">事件:‘continue-activity’ <i>(MacOS)</i></h3>
返回值:
-
eventEvent類型 -
typeString類型 - A string identifying the activity。對應(yīng)NSUserActivity.activityType。 -
userInfoObject類型 - 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. 如果你想要處理這個事件,你需要調(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>
返回值:
-
eventEvent類型 -
windowBrowserWindow類型
當(dāng)一個browserWindow失去焦點(diǎn)的時候被分發(fā)。
<h3 id="event-browser-window-focus">事件:‘browser-window-focus’</h3>
返回值:
-
eventEvent類型 -
windowBrowserWindow類型
當(dāng)一個browserWindow獲得焦點(diǎn)的時候被分發(fā)。
<h3 id="event-browser-window-created">事件:'browser-window-created’</h3>
返回值:
-
eventEvent類型 -
windowBrowserWindow類型
當(dāng)一個新的browserWindow被創(chuàng)建的時候被分發(fā)。
<h3 id="event-certificate-error">事件:‘certificate-error’</h3>
返回值:
-
eventEvent類型 -
webContentsWebContents類型 -
urlString類型 -
errorString類型 - 錯誤代碼 -
certificateCertificate類型 -
callbackFunction類型-
isTrustedBoolean類型 - 證書是否是可信的
-
無法驗(yàn)證url的certificate時被分發(fā),如果想要相信這個證書,并且你需要阻止默認(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>
返回值:
-
eventEvent類型 -
webContentsWebContents類型 -
urlURL類型 -
certificateListCertificate[]類型 -
callbackFunction類型-
certificateCertificate類型(可選參數(shù))
-
請求客戶端證書時被分發(fā)。
url對應(yīng)的是請求客戶端證書的導(dǎo)航記錄,callback被調(diào)用并且傳入從列表中過濾的記錄。使用event.preventDefault()阻止應(yīng)用程序使用保存的第一個證書。
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>
返回值:
-
eventEvent類型 -
webContentsWebContents類型 -
requestObject類型-
methodString類型 -
urlURL類型 -
referrerURL類型
-
-
authInfoObject類型-
isProxyBoolean類型 -
schemeString類型 -
hostString類型 -
portInteger類型 -
realmString類型
-
-
callbackFunction類型-
usernameString類型 -
passwordString類型
-
webContents想要做基本認(rèn)證(auth)時被分發(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>
返回值:
-
eventEvent類型 -
killedBoolean類型
當(dāng)GPU進(jìn)程崩潰或者被殺死時被分發(fā)。
<h3 id="event-accessibility-support-changed">事件:‘a(chǎn)ccessibility-support-changed’ <i>(MacOS,Windows)</i></h3>
返回值:
-
eventEvent類型 -
accessibilitySupportEnabledBoolean類型 -true是Chrome的accessibility支持被開啟,false則是被停用。
當(dāng)Chrome的accessibility支持改變時被分發(fā)。這個事件在殘疾人輔助功能,如屏幕閱讀器被啟用或停用時觸發(fā)。詳情見https://www.chromium.org/developers/design-documents/accessibility。
<h2 id="methods">方法</h2>
app對象有以下方法:
注意:某些方法只適用于特定的操作系統(tǒng),已經(jīng)被標(biāo)記。
<h3 id="app-quit">app.quit()</h3>
嘗試關(guān)閉所有窗口。before-quit事件將首先被分發(fā)。如果所有窗口都被成功的關(guān)閉則will-quit事件將會被分發(fā),并且默認(rèn)情況下應(yīng)用程序?qū)唤K止。
這個方法保證了所有beforeunload和unload事件的回調(diào)被正確的執(zhí)行。有可能在某個窗口取消退出并且在beforeunload事件中返回false。
<h3 id="app-exit">app.exit([exitCode])</h3>
-
exitCodeInteger類型(可選參數(shù))
傳入?yún)?shù)exitCode立即退出。exitCode默認(rèn)為0。
除非告訴用戶否則所有窗口立刻關(guān)閉,并且before-quit事件和will-quit事件將不會被分發(fā)。
<h3 id="app-relaunch">app.relaunch([options])</h3>
-
optionsObject類型(可選參數(shù))-
argsString[]類型 -(可選參數(shù)) -
execPathString類型(可選參數(shù))
-
當(dāng)前應(yīng)用實(shí)例被退出之后重載應(yīng)用。
默認(rèn)情況下,新的實(shí)例將會使用同樣的工作目錄和當(dāng)前實(shí)例的命令行參數(shù)。當(dāng)args參數(shù)被設(shè)置時,args參數(shù)將會被用來替代 命令行參數(shù)。當(dāng)execPath參數(shù)被設(shè)置時,execPath參數(shù)將會被用來在重載替代當(dāng)前應(yīng)用。
請注意,這個方法執(zhí)行時不能退出應(yīng)用,你需要在調(diào)用app.relaunch使應(yīng)用重新運(yùn)行之后再調(diào)用app.quit或者app.exit。
當(dāng)app.relaunch被多次調(diào)用,多個實(shí)例將會在當(dāng)前實(shí)例退出之后運(yùn)行。
一個立即重新啟動當(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中,聚焦在第一個可見的窗口。MacOS中,使得應(yīng)用程序變成激活狀態(tài)的應(yīng)用程序。Windows中,聚焦在應(yīng)用程序的第一個窗口。
<h3 id="app-hide">app.hide()</h3>
隱藏所有應(yīng)用程序的窗口,而不是最小化它們。
<h3 id="app-show">app.show()</h3>
顯示隱藏后的應(yīng)用程序窗口。但不會自動聚焦它們。
<h3 id="app-getAppPath">app.getAppPath()</h3>
返回值為String類型 - 當(dāng)前應(yīng)用程序的目錄。
<h3 id="app-getPath">app.getPath(name)</h3>
-
nameString類型
返回值為String類型 - 指定目錄或文件的整體路徑。如果發(fā)生故障將會拋出一個錯誤。
你可以通過名字請求以下的路徑:
-
home用戶的主頁目錄 -
appData每個用戶應(yīng)用程序數(shù)據(jù)目錄,默認(rèn)情況下指向下面的路徑:-
%APPDATA%在Windows中 -
$XDG_CONFIG_HOME或者~/.config在Linux中 -
~/Library/Application Support在macOS中
-
-
userData 存儲你的應(yīng)用程序配置文件的目錄,默認(rèn)情況下是appData`目錄加上你的應(yīng)用名稱。 -
temp臨時文件目錄。 -
exe當(dāng)前可執(zhí)行文件。 -
modulelibchromiumcontent庫。 -
desktop當(dāng)前用戶桌面目錄。 -
documents用戶的“我的文檔”的目錄。 -
downloads用戶的下載目錄。 -
music用戶的音樂目錄。 -
pictures用戶的圖片目錄。 -
videos用戶的視頻目錄。 -
pepperFlashSystemPluginPepper Flash插件在當(dāng)前系統(tǒng)版本中的完整路徑。
<h3 id="app-setPath">app.setPath(name, path)</h3>
-
nameString類型 -
pathString類型
使用指定的文件夾或者文件重寫指定的name對應(yīng)的路徑。如果指定的文件夾不存在那么這個方法將自動創(chuàng)建這個文件夾。如果發(fā)生故障將會拋出一個錯誤。
你只能重寫app.getPath中定義的name對應(yīng)的路徑。
默認(rèn)情況下,網(wǎng)頁的cookies和緩存將會被存儲在userData目錄下。如果你想要改變這個本地路徑,你需要在ready事件被app模塊分發(fā)之前重寫userData對應(yīng)的路徑。
<h3 id="app-getVersion">app.getVersion()</h3>
R返回值為String類型 - 已經(jīng)加載的應(yīng)用程序的版本號。如果在package.json文件內(nèi)沒有發(fā)現(xiàn)應(yīng)用程序的版本號,那么就會返回當(dāng)前包或者可執(zhí)行文件的版本號。
<h3 id="app-getName">app.getName()</h3>
返回值為String類型 - 寫在應(yīng)用程序package.json文件中的當(dāng)前應(yīng)用程序的名字。
通常根據(jù)npm 模塊說明,package.json中的name字段是短的小寫名稱。你通常都需要指定一個productName字段,這個字段是你應(yīng)用程序的全部大寫的名字,這個字段的名字Electron將會作為首選名稱。
<h3 id="app-setName">app.setName(name)</h3>
-
nameString類型
重寫當(dāng)前應(yīng)用程序的名字。
<h3 id="app-getLocale">app.getLocale()</h3>
返回值為String類型 - 當(dāng)前應(yīng)用程序的本地路徑。可能的返回值都將會被記錄在這里。
注意:當(dāng)發(fā)布你的打包好的應(yīng)用時,你需要發(fā)送到本地文件夾。
注意:Windows中你需要在ready事件被分發(fā)之后調(diào)用它。
<h3 id="app-addRecentDocument">app.addRecentDocument(path) <i>(MacOS,Windows)</i></h3>
-
pathString類型
添加路徑到最近使用的文檔列表。
這個列表由系統(tǒng)管理。Windows中你可以在任務(wù)欄查看這個列表,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>
-
protocolString類型 - 你的協(xié)議的名字,不包含://。如果你想要你的應(yīng)用處理electron://鏈接,則使用electron作為參數(shù)來調(diào)用這個方法。 -
pathString類型(可選參數(shù)) Windows可用 - 默認(rèn)為process.execPath -
argsString[]類型(可選參數(shù))Windows可用 - 默認(rèn)為空數(shù)組
返回值為Boolean類型 - 是否調(diào)用成功。
這個方法設(shè)置當(dāng)前的可執(zhí)行文件的默認(rèn)處理協(xié)議(又名URI方案)。它將允許你集成的應(yīng)用程序到系統(tǒng)的更深層次中。注冊一次,所有的your-protocol://鏈接都將會使用當(dāng)前的可執(zhí)行文件打開。
Windows中你可以提供可選的path參數(shù),路徑指向的可執(zhí)行文件,當(dāng)可執(zhí)行文件啟動時,args中的數(shù)組參數(shù)將會被傳遞到那個可執(zhí)行文件中。
注意:MacOS中你只能注冊已經(jīng)添加到你的應(yīng)用程序的info.plist文件中的協(xié)議,是不可以在運(yùn)行時間內(nèi)更改的。然而你可以在編譯的時候使用一個簡單的文本編輯器或腳本來更改它。詳情請參閱Apple’s documentation。
這個接口使用Windows Registry和LSSetDefaultHandlerForURLScheme內(nèi)核。
<h3 id="app-removeAsDefaultProtocolClient">app.removeAsDefaultProtocolClient(protocol[, path, args]) <i>(MacOS,Windows)</i></h3>
-
rotocolString類型 - 你的協(xié)議的名字,不包含://。 -
pathString類型(可選參數(shù))Windows可用 - 默認(rèn)為process.execPath -
argsString[]類型(可選參數(shù))Windows可用 - 默認(rèn)為空數(shù)組
返回值為Boolean類型 - 是否調(diào)用成功。
這個方法檢查當(dāng)前可執(zhí)行文件是否會默認(rèn)處理一個協(xié)議(又名URI方案)。如果會處理,將從應(yīng)用中移除這個默認(rèn)處理。
<h3 id="app-isDefaultProtocolClient">app.isDefaultProtocolClient(protocol[, path, args]) <i>(MacOS,Windows)</i></h3>
-
protocolString類型 - 你的協(xié)議的名字,不包含://。 -
pathString類型(可選參數(shù))Windows可用 - 默認(rèn)為process.execPath -
argsString[]類型(可選參數(shù))Windows可用 - 默認(rèn)為空數(shù)組
返回值為Boolean類型。
這個方法檢查當(dāng)前可執(zhí)行文件是否會默認(rèn)處理一個協(xié)議(又名URI方案)。如果會處理,將會返回true,否則將會返回false。
注意:MacOS中,如果這個應(yīng)用程序已經(jīng)注冊了默認(rèn)處理的協(xié)議,則你可以使用這個方法檢查。你也可以通過macOS機(jī)器中的~/Library/Preferences/com.apple.LaunchServices.plist文件來檢查。詳情請參閱Apple’s documentation。
這個接口使用Windows Registry和LSSetDefaultHandlerForURLScheme內(nèi)核。
<h3 id="app-setUserTasks">app.setUserTasks(tasks) <i>(Windows)</i></h3>
-
tasksTask[]類型 - Task類型的對象的數(shù)組。
Windows中添加tasks到跳轉(zhuǎn)列表的Tasks部分。
tasks是Task類型的對象的數(shù)組。
返回值為Boolean類型 - 是否調(diào)用成功。
注意:如果你想要自定義更多關(guān)于跳轉(zhuǎn)列表的內(nèi)容,請使用app.setJumpList(categories)。
<h3 id="app-getJumpListSettings">app.getJumpListSettings() <i>(Windows)</i></h3>
返回值為Object類型:
-
minItemsInteger類型 - 將在跳轉(zhuǎn)列表中展示的項(xiàng)目的最小數(shù)量(關(guān)于這個值的更詳細(xì)的描述請看MSDN docs)。 -
removedItemsJumpListItem[]類型 -JumpListItem對象類型的數(shù)組,JumpListItem對象對應(yīng)的項(xiàng)是已經(jīng)明確的從跳轉(zhuǎn)列表中被用戶刪除的。這些項(xiàng)一定不能在下一次調(diào)用app.setJumpList()時被重新加入到跳轉(zhuǎn)列表中,否則Windows將不會展示任何包含了刪除項(xiàng)的內(nèi)容。
<h3 id="app-setJumpList">app.setJumpList(categories) <i>(Windows)</i></h3>
-
categoriesJumpListCategory[]類型或者為null-JumpListCategory類型的對象的數(shù)組。
設(shè)置或者刪除一個應(yīng)用程序中的自定義跳轉(zhuǎn)列表,并且會返回一下字符串之一:
-
ok- 沒有出錯。 -
error- 發(fā)生了一個或者多個錯誤,運(yùn)行日志能夠可能造成的原因。 -
invalidSeparatorError- 試圖將一個分隔符加入到跳轉(zhuǎn)列表的自定義部分。分隔符只允許在標(biāo)準(zhǔn)的Tasks部分中添加。 -
fileTypeRegistrationError- 試圖將一個應(yīng)用程序沒有注冊可以處理的文件類型添加到跳轉(zhuǎn)列表中。 -
customCategoryAccessDeniedError- 由于設(shè)置用戶隱私或者群組策略而不能添加到自定義跳轉(zhuǎn)列表中。
如果categories是null,之前設(shè)置的自定義跳轉(zhuǎn)列表(如果有的話)將會被重新添加到應(yīng)用程序的跳轉(zhuǎn)列表中(Windows自動管理)。
注意:如果一個JumpListCategory對象沒有設(shè)置type屬性和name屬性,那么type屬性將會被假設(shè)為tasks。如果name屬性被設(shè)置而type屬性沒有被設(shè)置,那么type屬性將被假設(shè)為custom。
注意:用戶可以從自定義的列表中移除項(xiàng),Windows將不允許一個被移除的項(xiàng)重新添加回一個自定義列表,直到下次成功調(diào)用app.setJumpList(categories).之后。任何試圖重新添加一個之前移除的項(xiàng)到一個自定義列表中的操作都將會被跳轉(zhuǎn)列表忽略。獲得列表中已經(jīng)刪除的項(xiàng)請使用app.getJumpListSettings()。
這里有一個創(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>
-
callbackFunction類型-
argvString[]類型 - 第二實(shí)例的命令行參數(shù)數(shù)組 -
workingDirectoryString類型 - 第二實(shí)例的工作目錄
-
這個方法使你的應(yīng)用程序變成一個單例應(yīng)用程序而不允許多個你的應(yīng)用程序的實(shí)例運(yùn)行,這個方法將會確保你的應(yīng)用程序只有一個實(shí)例在運(yùn)行,并且其他的實(shí)例會發(fā)送信息到這個實(shí)例上并且退出。
當(dāng)?shù)诙?shí)例被運(yùn)行的時候callback會被callback(argv, workingDirectory)調(diào)用。argv是第二實(shí)例的命令行參數(shù)的數(shù)組,workingDirectory是第二實(shí)例當(dāng)前工作的目錄。通常應(yīng)用程序響應(yīng)這個回掉來使得它們的第一窗口聚焦并且取消最小化。
callback一定在app分發(fā)ready事件之后被執(zhí)行。
如果你操作的進(jìn)程是應(yīng)用程序的第一實(shí)例,則這個方法返回false并且你的應(yīng)用會繼續(xù)加載。如果你操作的進(jìn)程已經(jīng)發(fā)送參數(shù)給其他的實(shí)例,那么將會返回true,并且你需要立即退出這個實(shí)例。
MacOS中,當(dāng)用戶嘗試在Finder中打開一個你應(yīng)用程序的第二實(shí)例時系統(tǒng)會自動的強(qiáng)制執(zhí)行單例模式,并且open-file和open-url事件將會被分發(fā)。然而,當(dāng)用戶在命令行中啟動你的應(yīng)用程序時將會繞過系統(tǒng)的單例機(jī)制,你需要使用這個方法確保執(zhí)行單粒模式。
一個當(dāng)?shù)诙?shí)例啟動時第一實(shí)例的窗口活動例子:
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)用程序的多個實(shí)例再一次并排運(yùn)行。
<h3 id="app-setUserActivity">app.setUserActivity(type, userInfo[, webpageURL]) <i>(MacOS)</i></h3>
-
typeString類型 - 活動的唯一標(biāo)識。對應(yīng)NSUserActivity.activityType。 -
userInfoObject類型 - App-specific state to store for use by another device. -
webpageURLString類型(可選參數(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)建一個NSUserActivity并且將它設(shè)置為當(dāng)前的活動。這個活動是有資格在以后Handoff到其他設(shè)備的。
<h3 id="app-getCurrentActivityType">app.getCurrentActivityType() <i>(MacOS)</i></h3>
返回值為String類型 - 當(dāng)前正在運(yùn)行的活動的類型。
<h3 id="app-setAppUserModelId">app.setAppUserModelId(id) <i>(Windows)</i></h3>
-
idString類型
使用參數(shù)id更改Application User Model ID。
<h3 id="app-importCertificate">app.importCertificate(options, callback) <i>(Linux)</i></h3>
-
optionsObject類型-
certificateString類型 - pkcs12文件的路徑。 -
passwordString類型 - 證書的密碼。
-
-
callbackFunction類型-
resultInteger類型 - 引用結(jié)果。
-
引用pkcs12類型的證書到到平臺證書存儲中。引用操作之后會將result傳入調(diào)用callback,根據(jù)chromium的net_error_list,值為0時代表成功,其他任何值都代表失敗。
<h3 id="app-disableHardwareAcceleration">app.disableHardwareAcceleration()</h3>
禁用當(dāng)前應(yīng)用的硬件加速。
這個方法只能在應(yīng)用準(zhǔn)備之前調(diào)用。
<h3 id="app-setBadgeCount">app.setBadgeCount(count) <i>(MacOS,Linux)</i></h3>
-
countInteger類型
返回值為Boolean類型 - 是否調(diào)用成功。
給當(dāng)前應(yīng)用設(shè)置計(jì)數(shù)標(biāo)識。設(shè)置為0將會隱藏這個標(biāo)識。
MacOS中它將展示在dock的圖標(biāo)上。Linux中它只在Unity的啟動器上工作。
注意:Unity啟動器需要一個.desktop文件的實(shí)例才能工作,查看更多信息請閱讀Desktop Environment Integration。
<h3 id="app-getBadgeCount">app.getBadgeCount() <i>(MacOS,Linux)</i></h3>
返回值是Integer類型 - 當(dāng)前展示的計(jì)數(shù)標(biāo)識的值。
<h3 id="app-isUnityRunning">app.isUnityRunning() <i>(Linux)</i></h3>
返回值為Boolean - 當(dāng)前的桌面面環(huán)境是否為Unity啟動器。
<h3 id="app-getLoginItemSettings">app.getLoginItemSettings([options]) <i>(MacOS,Windows)</i></h3>
-
optionsObject類型(可選參數(shù))-
pathString類型(可選參數(shù))Windows可用 - 與之前的可執(zhí)行文件的目錄相比較。默認(rèn)是process.execPath。 -
argsString類型 Windows可用 - 與之前的命令行參數(shù)相比較。默認(rèn)是空數(shù)組。
-
如果你給app.setLoginItemSettings提供path和args選項(xiàng) 那么你需要通過同樣的參數(shù)來正確的設(shè)置openAtLogin。
返回值為Object類型:
-
openAtLoginBoolean類型 - 如果應(yīng)用在登錄系統(tǒng)時打開則是true。 -
openAsHiddenBoolean類型 - 如果應(yīng)用在登錄系統(tǒng)時隱藏模式打開則是true。這個設(shè)置只有MacOS支持。 -
wasOpenedAtLoginBoolean類型 - 如果應(yīng)用在登錄系統(tǒng)時已經(jīng)自動打開則是true。這個設(shè)置只有MacOS支持。 -
wasOpenedAsHiddenBoolean類型 - 如果應(yīng)用在作為一個隱藏啟動項(xiàng)打開則是true。這表示應(yīng)用在啟動時并沒有打開任何窗口。這個設(shè)置只有MacOS支持。 -
restoreStateBoolean類型 - 如果應(yīng)用作為一個登錄項(xiàng)已經(jīng)被打開并且需要恢復(fù)之前的會話狀態(tài)則是true。這表示應(yīng)用需要恢復(fù)最近一次關(guān)閉應(yīng)用時打開的窗口。這個設(shè)置只有MacOS支持。
注意:這個接口在MAS builds上是沒有效果的。
<h3 id="app-setLoginItemSettings">app.setLoginItemSettings(settings[, path, args]) <i>(MacOS,Windows)</i></h3>
-
settingsObject類型-
openAtLoginBoolean類型(可選參數(shù))-true為設(shè)置應(yīng)用在登錄系統(tǒng)時打開,false則將應(yīng)用從登錄啟動項(xiàng)中移除。默認(rèn)是false。 -
openAsHiddenBoolean類型(可選參數(shù))-true為設(shè)置應(yīng)用隱藏打開。默認(rèn)為false。用戶可以從系統(tǒng)偏好設(shè)置中設(shè)置這個選項(xiàng),所以當(dāng)應(yīng)用被打開時需要檢查app.getLoginItemStatus().wasOpenedAsHidden來獲取這個選項(xiàng)的當(dāng)前值。這個設(shè)置僅有MacOS支持。 -
pathString類型(可選參數(shù))Windows可用 - 登錄時啟動的可執(zhí)行文件的路徑。默認(rèn)為process.execPath。 -
argsString類型 Windows可用 - 傳遞給可執(zhí)行文件的命令行參數(shù)。默認(rèn)為空的數(shù)組。注意使用引號包裹路徑。
-
設(shè)置應(yīng)用的登錄選項(xiàng)。
Windows中和Electron的autoUpdater一起工作,which uses Squirrel,你將想要設(shè)置Update.exe的啟動路徑,并且通過參數(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"`
]
})
注意:這個接口在MAS builds上是沒有效果的。
<h3 id="app-isAccessibilitySupportEnabled">app.isAccessibilitySupportEnabled() <i>(MacOS,Windows)</i></h3>
返回值為Boolean類型 - 如果Chrome的輔助功能被開啟則是true,false則是尚未開啟。如果檢測到使用了輔助技術(shù),比如屏幕閱讀,這個接口將會返回true。詳細(xì)請見https://www.chromium.org/developers/design-documents/accessibility。
<h3 id="app-setAboutPanelOptions">app.setAboutPanelOptions(options) <i>(MacOS)</i></h3>
-
optionsObject類型-
applicationNameString類型(可選參數(shù))- 應(yīng)用的名字。 -
applicationVersionString類型(可選參數(shù))- 應(yīng)用的版本。 -
copyrightString類型(可選參數(shù))- Copyright信息。 -
creditsString類型(可選參數(shù))- 信用信息。 -
versionString類型(可選參數(shù))- 應(yīng)用的開發(fā)版本號。
-
設(shè)置關(guān)于面板的選項(xiàng)。這將會覆蓋應(yīng)用的.plist文件中的定義的值。查看Apple docs獲取更多信息。
<h3 id="app-commandLine-appendSwitch">app.commandLine.appendSwitch(switch[, value])</h3>
-
switchString類型 - 一個命令行開關(guān) -
valueString類型(可選參數(shù))- 傳給開關(guān)的值
給Chromium命令行添加一個開關(guān)(使用value參數(shù))。
注意:這將不會影響process.argv,通常使用這個方法控制一些底層的Chromium行為。
<h3 id="app-commandLine-appendArgument">app.commandLine.appendArgument(value)</h3>
-
valueString類型 - 這個參數(shù)將會被加入到命令行中。
添加一個參數(shù)到Chromium的命令行。這個參數(shù)將會被正確的引用。
注意:這將不會影響process.argv。
<h3 id="app-dock-bounce">app.dock.bounce([type]) <i>(MacOS)</i></h3>
-
typeString類型(可選參數(shù))- 可以是critical或者informational。默認(rèn)是informational。
設(shè)置為critical時,dock的圖標(biāo)將會不斷跳動,直到這個應(yīng)用被激活或者請求被取消。
設(shè)置為informational時,dock的圖標(biāo)將跳動一秒。然而這個請求一直有效,直到這個應(yīng)用被激活或者請求被取消。
返回值為代表著請求的Integer類型的ID。
<h3 id="app-dock-cancelBounce">app.dock.cancelBounce(id) <i>(MacOS)</i></h3>
-
idInteger類型
通過id來取消跳動。
<h3 id="app-dock-downloadFinished">app.dock.downloadFinished(filePath) <i>(MacOS)</i></h3>
-
filePathString類型
如果filePath指向的是Downloads文件夾則會使下載圖標(biāo)跳動。
<h3 id="app-dock-setBadge">app.dock.setBadge(text) <i>(MacOS)</i></h3>
-
textString類型
設(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)用,所以可能不會在調(diào)用后立刻返回結(jié)果。
<h3 id="app-dock-setMenu">app.dock.setMenu(menu) <i>(MacOS)</i></h3>
-
menuMenu類型
設(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)。