app
控制您的應用程式的事件生命週期。
程序: 主程序
以下範例示範如何在最後一個視窗關閉時結束應用程式
const { app } = require('electron')
app.on('window-all-closed', () => {
app.quit()
})
事件
app
物件會發射以下事件
事件: 'will-finish-launching'
當應用程式完成基本啟動時發射。在 Windows 和 Linux 上,will-finish-launching
事件與 ready
事件相同;在 macOS 上,此事件代表 NSApplication
的 applicationWillFinishLaunching
通知。
在大多數情況下,您應該在 ready
事件處理常式中執行所有操作。
事件: 'ready'
傳回
event
事件launchInfo
Record<string, any> | NotificationResponse macOS
在 Electron 完成初始化後發射一次。在 macOS 上,launchInfo
保留 NSUserNotification
的 userInfo
,或來自 UNNotificationResponse
的資訊(如果應用程式是從通知中心啟動)。您也可以呼叫 app.isReady()
來檢查此事件是否已觸發,並呼叫 app.whenReady()
來取得在 Electron 初始化時完成的 Promise。
注意: ready
事件僅在主程序完成執行事件迴圈的第一個刻度後觸發。如果需要在 ready
事件之前呼叫 Electron API,請確保在主程序的頂層上下文中同步呼叫它。
事件: 'window-all-closed'
當所有視窗都已關閉時發射。
如果您未訂閱此事件且所有視窗都已關閉,則預設行為是結束應用程式;但是,如果您訂閱,您可以控制應用程式是否結束。如果使用者按下 Cmd + Q
,或開發人員呼叫 app.quit()
,Electron 將首先嘗試關閉所有視窗,然後發射 will-quit
事件,在這種情況下,不會發射 window-all-closed
事件。
事件: 'before-quit'
傳回
event
事件
在應用程式開始關閉其視窗之前發射。呼叫 event.preventDefault()
將防止預設行為,即終止應用程式。
注意: 如果應用程式結束是由 autoUpdater.quitAndInstall()
啟動,則 before-quit
會在所有視窗上發射 close
事件並關閉它們之後發射。
注意: 在 Windows 上,如果應用程式因系統關機/重新啟動或使用者登出而關閉,則不會發射此事件。
事件: 'will-quit'
傳回
event
事件
當所有視窗都已關閉且應用程式即將結束時發射。呼叫 event.preventDefault()
將防止預設行為,即終止應用程式。
請參閱 window-all-closed
事件的描述,以了解 will-quit
和 window-all-closed
事件之間的差異。
注意: 在 Windows 上,如果應用程式因系統關機/重新啟動或使用者登出而關閉,則不會發射此事件。
事件: 'quit'
傳回
event
事件exitCode
整數
當應用程式正在結束時發射。
注意: 在 Windows 上,如果應用程式因系統關機/重新啟動或使用者登出而關閉,則不會發射此事件。
事件: 'open-file' macOS
傳回
event
事件path
字串
當使用者想要使用應用程式開啟檔案時發射。當應用程式已開啟且作業系統想要重複使用應用程式開啟檔案時,通常會發射 open-file
事件。當檔案拖放到 Dock 上且應用程式尚未執行時,也會發射 open-file
。請確保在應用程式啟動的早期階段(甚至在發射 ready
事件之前)監聽 open-file
事件,以處理這種情況。
如果您想要處理此事件,您應該呼叫 event.preventDefault()
。
在 Windows 上,您必須剖析 process.argv
(在主程序中)才能取得檔案路徑。
事件: 'open-url' macOS
傳回
event
事件url
字串
當使用者想要使用應用程式開啟 URL 時發射。您的應用程式的 Info.plist
檔案必須在 CFBundleURLTypes
金鑰中定義 URL 方案,並將 NSPrincipalClass
設定為 AtomApplication
。
與 open-file
事件一樣,請務必在應用程式啟動的早期階段註冊 open-url
事件的監聽器,以偵測應用程式是否正在開啟以處理 URL。如果您回應 ready
事件來註冊監聽器,您將錯過觸發應用程式啟動的 URL。
事件: 'activate' macOS
傳回
event
事件hasVisibleWindows
布林值
當應用程式被啟動時發射。各種操作可以觸發此事件,例如首次啟動應用程式、嘗試在應用程式已在執行時重新啟動應用程式,或按一下應用程式的 Dock 或工作列圖示。
事件: 'did-become-active' macOS
傳回
event
事件
當應用程式變成活動狀態時發射。這與 activate
事件的不同之處在於,did-become-active
每次應用程式變成活動狀態時都會發射,而不僅僅是在按一下 Dock 圖示或重新啟動應用程式時。當使用者透過 macOS 應用程式切換器切換到應用程式時,也會發射此事件。
事件: 'did-resign-active' macOS
傳回
event
事件
當應用程式不再處於活動狀態且沒有焦點時發射。例如,按一下另一個應用程式或使用 macOS 應用程式切換器切換到另一個應用程式可能會觸發此事件。
事件: 'continue-activity' macOS
傳回
event
事件type
字串 - 識別活動的字串。對應到NSUserActivity.activityType
。userInfo
未知 - 包含活動在另一個裝置上儲存的應用程式特定狀態。details
物件webpageURL
字串 (選用) - 識別活動在另一個裝置上存取的網頁 URL 的字串(如果可用)。
當來自不同裝置的活動想要恢復時,在 接力 期間發射。如果您想要處理此事件,您應該呼叫 event.preventDefault()
。
使用者活動只能在與活動來源應用程式具有相同開發人員團隊 ID 且支援活動類型的應用程式中繼續。支援的活動類型在應用程式的 Info.plist
中的 NSUserActivityTypes
金鑰下指定。
事件: 'will-continue-activity' macOS
傳回
event
事件type
字串 - 識別活動的字串。對應到NSUserActivity.activityType
。
當來自不同裝置的活動想要恢復之前,在 接力 期間發射。如果您想要處理此事件,您應該呼叫 event.preventDefault()
。
事件: 'continue-activity-error' macOS
傳回
event
事件type
字串 - 識別活動的字串。對應到NSUserActivity.activityType
。error
字串 - 包含錯誤的本地化描述的字串。
當來自不同裝置的活動無法恢復時,在 接力 期間發射。
事件: 'activity-was-continued' macOS
傳回
event
事件type
字串 - 識別活動的字串。對應到NSUserActivity.activityType
。userInfo
未知 - 包含活動儲存的應用程式特定狀態。
在 接力 期間,在此裝置上的活動成功在另一個裝置上恢復後發射。
事件: 'update-activity-state' macOS
傳回
event
事件type
字串 - 識別活動的字串。對應到NSUserActivity.activityType
。userInfo
未知 - 包含活動儲存的應用程式特定狀態。
當 接力 即將在另一個裝置上恢復時發射。如果您需要更新要傳輸的狀態,您應該立即呼叫 event.preventDefault()
,建構新的 userInfo
字典,並及時呼叫 app.updateCurrentActivity()
。否則,操作將失敗,並且將呼叫 continue-activity-error
。
事件: 'new-window-for-tab' macOS
傳回
event
事件
當使用者按一下原生 macOS 新增分頁按鈕時發射。只有當目前的 BrowserWindow
具有 tabbingIdentifier
時,新增分頁按鈕才會顯示。
事件: 'browser-window-blur'
傳回
event
事件window
BrowserWindow
當 browserWindow 失去焦點時發射。
事件: 'browser-window-focus'
傳回
event
事件window
BrowserWindow
當 browserWindow 取得焦點時發射。
事件: 'browser-window-created'
傳回
event
事件window
BrowserWindow
當建立新的 browserWindow 時發射。
事件: 'web-contents-created'
傳回
event
事件webContents
WebContents
當建立新的 webContents 時發射。
事件: 'certificate-error'
傳回
event
事件webContents
WebContentsurl
字串error
字串 - 錯誤代碼certificate
Certificatecallback
函數isTrusted
布林值 - 是否將憑證視為受信任
isMainFrame
布林值
當無法驗證 url
的 certificate
時發射,要信任憑證,您應該使用 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)
}
})
事件: 'select-client-certificate'
傳回
event
事件webContents
WebContentsurl
URLcertificateList
Certificate[]callback
函數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])
})
事件: 'login'
傳回
event
事件webContents
WebContents (選用)authenticationResponseDetails
物件url
URLpid
數字
authInfo
物件isProxy
布林值scheme
字串host
字串port
整數realm
字串
callback
函數username
字串 (選用)password
字串 (選用)
當 webContents
或 工具程序 想要執行基本驗證時發射。
預設行為是取消所有驗證。要覆寫此行為,您應該使用 event.preventDefault()
防止預設行為,並使用認證呼叫 callback(username, password)
。
const { app } = require('electron')
app.on('login', (event, webContents, details, authInfo, callback) => {
event.preventDefault()
callback('username', 'secret')
})
如果呼叫 callback
時沒有使用者名稱或密碼,則驗證請求將被取消,並且驗證錯誤將傳回頁面。
事件: 'gpu-info-update'
每當有 GPU 資訊更新時發射。
事件: 'render-process-gone'
傳回
event
事件webContents
WebContentsdetails
RenderProcessGoneDetails
當渲染程序意外消失時發射。這通常是因為它崩潰或被終止。
事件: 'child-process-gone'
傳回
event
事件details
物件type
字串 - 程序類型。以下值之一工具
Zygote
沙箱協助程序
GPU
Pepper 外掛程式
Pepper 外掛程式 Broker
未知
reason
字串 - 子程序消失的原因。可能的值clean-exit
- 程序以零的結束代碼結束abnormal-exit
- 程序以非零的結束代碼結束killed
- 程序被發送 SIGTERM 或以其他方式外部終止crashed
- 程序崩潰oom
- 程序記憶體不足launch-failed
- 程序從未成功啟動integrity-failure
- Windows 程式碼完整性檢查失敗
exitCode
數字 - 程序的結束代碼(例如,如果為 POSIX,則來自 waitpid 的狀態;如果為 Windows,則來自 GetExitCodeProcess)。serviceName
字串 (選用) - 程序的非本地化名稱。name
字串 (選用) - 程序的名稱。工具的範例:Audio Service
、Content Decryption Module Service
、Network Service
、Video Capture
等。
當子程序意外消失時發射。這通常是因為它崩潰或被終止。它不包含渲染程序。
事件: 'accessibility-support-changed' macOS Windows
傳回
event
事件accessibilitySupportEnabled
布林值 -true
表示 Chrome 的輔助功能支援已啟用,false
表示未啟用。
當 Chrome 的輔助功能支援變更時發射。當輔助技術(例如螢幕閱讀器)啟用或停用時,會觸發此事件。請參閱 https://www.chromium.org/developers/design-documents/accessibility 以取得更多詳細資訊。
事件: 'session-created'
傳回
session
Session
當 Electron 建立新的 session
時發射。
const { app } = require('electron')
app.on('session-created', (session) => {
console.log(session)
})
事件: 'second-instance'
傳回
event
事件argv
字串[] - 第二個執行個體的命令列引數陣列workingDirectory
字串 - 第二個執行個體的工作目錄additionalData
未知 - 從第二個執行個體傳遞的額外資料的 JSON 物件
當第二個執行個體已執行並呼叫 app.requestSingleInstanceLock()
時,此事件將在應用程式的主要執行個體內發射。
argv
是第二個執行個體的命令列引數陣列,而 workingDirectory
是其目前的工作目錄。通常應用程式會透過使其主要視窗取得焦點且非最小化來回應此事件。
注意: argv
不會與傳遞給第二個執行個體的引數清單完全相同。順序可能會變更,並且可能會附加額外的引數。如果您需要維護完全相同的引數,建議改為使用 additionalData
。
注意: 如果第二個執行個體是由與第一個執行個體不同的使用者啟動,則 argv
陣列將不包含引數。
此事件保證在 app
的 ready
事件發射後發射。
注意: Chromium 可能會新增額外的命令列引數,例如 --original-process-start-time
。
方法
app
物件具有以下方法
注意: 某些方法僅在特定的作業系統上可用,並標示為如此。
app.quit()
嘗試關閉所有視窗。將首先發射 before-quit
事件。如果所有視窗都成功關閉,將發射 will-quit
事件,並且預設情況下應用程式將終止。
此方法保證所有 beforeunload
和 unload
事件處理常式都會正確執行。視窗可能會透過在 beforeunload
事件處理常式中傳回 false
來取消結束。
app.exit([exitCode])
exitCode
整數 (選用)
使用 exitCode
立即結束。exitCode
預設為 0。
所有視窗將立即關閉,而不會詢問使用者,並且不會發射 before-quit
和 will-quit
事件。
app.relaunch([options])
當目前的執行個體結束時重新啟動應用程式。
預設情況下,新的執行個體將使用與目前執行個體相同的工作目錄和命令列引數。當指定 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)
app.isReady()
傳回 boolean
- 如果 Electron 已完成初始化,則為 true
,否則為 false
。另請參閱 app.whenReady()
。
app.whenReady()
傳回 Promise<void>
- 在 Electron 初始化時完成。如果應用程式尚未準備好,則可以作為檢查 app.isReady()
和訂閱 ready
事件的便捷替代方案。
app.focus([options])
在 Linux 上,焦點放在第一個可見的視窗上。在 macOS 上,使應用程式成為活動應用程式。在 Windows 上,焦點放在應用程式的第一個視窗上。
您應該盡可能謹慎地使用 steal
選項。
app.hide()
macOS
隱藏所有應用程式視窗,而不將它們最小化。
app.isHidden()
macOS
傳回 boolean
- 如果應用程式(包括其所有視窗)已隱藏(例如,使用 Command-H
),則為 true
,否則為 false
。
app.show()
macOS
在應用程式視窗隱藏後顯示它們。不會自動將它們設為焦點。
app.setAppLogsPath([path])
path
字串 (選用) - 您的記錄的自訂路徑。必須是絕對路徑。
設定或建立應用程式記錄的目錄,然後可以使用 app.getPath()
或 app.setPath(pathName, newPath)
進行操作。
呼叫不帶 path
參數的 app.setAppLogsPath()
將導致此目錄在 macOS 上設定為 ~/Library/Logs/YourAppName
,在 Linux 和 Windows 上設定在 userData
目錄內。
app.getAppPath()
傳回 string
- 目前的應用程式目錄。
app.getPath(name)
name
字串 - 您可以按名稱請求以下路徑home
使用者的主目錄。appData
每個使用者的應用程式資料目錄,預設情況下指向- Windows 上的
%APPDATA%
- Linux 上的
$XDG_CONFIG_HOME
或~/.config
- macOS 上的
~/Library/Application Support
- Windows 上的
userData
用於儲存您的應用程式的設定檔的目錄,預設情況下是附加您的應用程式名稱的appData
目錄。按照慣例,儲存使用者資料的檔案應寫入此目錄,並且不建議在此處寫入大型檔案,因為某些環境可能會將此目錄備份到雲端儲存空間。sessionData
用於儲存Session
產生的資料的目錄,例如 localStorage、Cookie、磁碟快取、下載的字典、網路狀態、開發人員工具檔案。預設情況下,這指向userData
。Chromium 可能會在此處寫入非常大的磁碟快取,因此如果您的應用程式不依賴瀏覽器儲存空間(如 localStorage 或 Cookie)來儲存使用者資料,建議將此目錄設定為其他位置,以避免污染userData
目錄。temp
暫存目錄。exe
目前的可執行檔。module
libchromiumcontent
程式庫。desktop
目前使用者的桌面目錄。documents
使用者的「我的文件」目錄。downloads
使用者的下載目錄。music
使用者的音樂目錄。pictures
使用者的圖片目錄。videos
使用者的影片目錄。recent
使用者最近使用的檔案的目錄(僅限 Windows)。logs
您的應用程式記錄資料夾的目錄。crashDumps
儲存損毀傾印的目錄。
傳回 string
- 與 name
關聯的特殊目錄或檔案的路徑。如果失敗,則會擲回 Error
。
如果在未先呼叫 app.setAppLogsPath()
的情況下呼叫 app.getPath('logs')
,則會建立預設記錄目錄,相當於呼叫不帶 path
參數的 app.setAppLogsPath()
。
app.getFileIcon(path[, options])
path
字串
傳回 Promise<NativeImage>
- 以應用程式圖示 fulfilled,其為 NativeImage。
擷取路徑相關聯的圖示。
在 Windows 上,有 2 種圖示
- 與特定檔案副檔名相關聯的圖示,例如
.mp3
、.png
等。 - 檔案本身內部的圖示,例如
.exe
、.dll
、.ico
。
在 Linux 和 macOS 上,圖示取決於與檔案 MIME 類型相關聯的應用程式。
app.setPath(name, path)
name
字串path
字串
覆寫與 name
相關聯的特殊目錄或檔案的 path
。如果路徑指定了不存在的目錄,則會拋出 Error
。在這種情況下,應該使用 fs.mkdirSync
或類似方法建立目錄。
您只能覆寫在 app.getPath
中定義的 name
的路徑。
預設情況下,網頁的 cookies 和快取將儲存在 sessionData
目錄下。如果您想更改此位置,您必須在發出 app
模組的 ready
事件之前覆寫 sessionData
路徑。
app.getVersion()
傳回 string
- 已載入應用程式的版本。如果在應用程式的 package.json
檔案中找不到版本,則會傳回目前 bundle 或可執行檔的版本。
app.getName()
傳回 string
- 目前應用程式的名稱,即應用程式 package.json
檔案中的名稱。
通常,根據 npm modules spec,package.json
的 name
欄位是一個簡短的小寫名稱。您通常也應該指定一個 productName
欄位,它是您應用程式的完整首字母大寫名稱,Electron 將優先於 name
使用它。
app.setName(name)
name
字串
覆寫目前應用程式的名稱。
注意: 此函數會覆寫 Electron 內部使用的名稱;它不會影響作業系統使用的名稱。
app.getLocale()
傳回 string
- 目前應用程式的語系,使用 Chromium 的 l10n_util
函式庫擷取。可能的傳回值記錄在此處。
若要設定語系,您會想要在應用程式啟動時使用命令列開關,可在此處找到。
注意: 當您發佈封裝的應用程式時,您也必須運送 locales
資料夾。
注意: 此 API 必須在發出 ready
事件後呼叫。
注意: 若要查看此 API 與其他語系和語言 API 比較的範例傳回值,請參閱 app.getPreferredSystemLanguages()
。
app.getLocaleCountryCode()
傳回 string
- 使用者作業系統的語系雙字母 ISO 3166 國家/地區代碼。該值取自原生作業系統 API。
注意: 當無法偵測語系國家/地區代碼時,它會傳回空字串。
app.getSystemLocale()
傳回 string
- 目前的系統語系。在 Windows 和 Linux 上,它是使用 Chromium 的 i18n
函式庫擷取。在 macOS 上,則改用 [NSLocale currentLocale]
。若要取得使用者目前的系統語言(與語系不一定相同),最好使用 app.getPreferredSystemLanguages()
。
不同的作業系統也以不同的方式使用地區資料
- Windows 11 使用地區格式來顯示數字、日期和時間。
- macOS Monterey 使用地區來格式化數字、日期、時間,以及選取要使用的貨幣符號。
因此,此 API 可用於諸如在日曆應用程式中選擇格式來呈現日期和時間等目的,尤其是在開發人員希望格式與作業系統一致時。
注意: 此 API 必須在發出 ready
事件後呼叫。
注意: 若要查看此 API 與其他語系和語言 API 比較的範例傳回值,請參閱 app.getPreferredSystemLanguages()
。
app.getPreferredSystemLanguages()
傳回 string[]
- 使用者偏好的系統語言,從最偏好到最不偏好,包括國家/地區代碼(如果適用)。使用者可以在 Windows 或 macOS 上透過「語言與地區」設定修改和新增至此清單。
API 在 Windows 上使用 GlobalizationPreferences
(並回退到 GetSystemPreferredUILanguages
),在 macOS 上使用 \[NSLocale preferredLanguages\]
,在 Linux 上使用 g_get_language_names
。
此 API 可用於諸如決定以何種語言呈現應用程式等目的。
以下是一些具有不同組態的各種語言和語系 API 的傳回值範例
在 Windows 上,假設應用程式語系為德文,地區格式為芬蘭文(芬蘭),而偏好的系統語言從最偏好到最不偏好依序為法文(加拿大)、英文(美國)、簡體中文(中國)、芬蘭文和西班牙文(拉丁美洲)
app.getLocale() // 'de'
app.getSystemLocale() // 'fi-FI'
app.getPreferredSystemLanguages() // ['fr-CA', 'en-US', 'zh-Hans-CN', 'fi', 'es-419']
在 macOS 上,假設應用程式語系為德文,地區為芬蘭,而偏好的系統語言從最偏好到最不偏好依序為法文(加拿大)、英文(美國)、簡體中文和西班牙文(拉丁美洲)
app.getLocale() // 'de'
app.getSystemLocale() // 'fr-FI'
app.getPreferredSystemLanguages() // ['fr-CA', 'en-US', 'zh-Hans-FI', 'es-419']
可用的語言和地區以及可能的傳回值在兩個作業系統之間有所不同。
從上面的範例可以看出,在 Windows 上,偏好的系統語言可能沒有國家/地區代碼,並且其中一種偏好的系統語言與用於地區格式的語言相對應。在 macOS 上,地區更像是預設國家/地區代碼:使用者不需要將芬蘭文作為偏好語言即可使用芬蘭作為地區,並且國家/地區代碼 FI
用作語言名稱中沒有關聯國家/地區的偏好系統語言的國家/地區代碼。
app.addRecentDocument(path)
macOS Windows
path
字串
將 path
新增至最近使用的文件清單。
此清單由作業系統管理。在 Windows 上,您可以從工作列造訪此清單,而在 macOS 上,您可以從 Dock 選單造訪此清單。
app.clearRecentDocuments()
macOS Windows
清除最近使用的文件清單。
app.setAsDefaultProtocolClient(protocol[, path, args])
protocol
字串 - 您的協定的名稱,不含://
。例如,如果您希望您的應用程式處理electron://
連結,請使用electron
作為參數呼叫此方法。path
字串 (選用) Windows - Electron 可執行檔的路徑。預設為process.execPath
args
字串陣列 (選用) Windows - 傳遞給可執行檔的引數。預設為空陣列
傳回 boolean
- 呼叫是否成功。
將目前的可執行檔設定為協定(又稱 URI 方案)的預設處理常式。它允許您將您的應用程式更深入地整合到作業系統中。註冊後,所有具有 your-protocol://
的連結都將使用目前的可執行檔開啟。整個連結,包括協定,都將作為參數傳遞給您的應用程式。
注意: 在 macOS 上,您只能註冊已新增到您應用程式的 info.plist
中的協定,這無法在執行階段修改。但是,您可以在建置時透過 Electron Forge、Electron Packager 或使用文字編輯器編輯 info.plist
來變更檔案。請參閱 Apple 的文件以取得詳細資訊。
注意: 在 Windows 市集環境中(當封裝為 appx
時),此 API 將對所有呼叫傳回 true
,但它設定的登錄機碼將無法由其他應用程式存取。為了將您的 Windows 市集應用程式註冊為預設協定處理常式,您必須在您的 manifest 中宣告協定。
API 在內部使用 Windows 登錄和 LSSetDefaultHandlerForURLScheme
。
app.removeAsDefaultProtocolClient(protocol[, path, args])
macOS Windows
protocol
字串 - 您的協定的名稱,不含://
。path
字串 (選用) Windows - 預設為process.execPath
args
字串陣列 (選用) Windows - 預設為空陣列
傳回 boolean
- 呼叫是否成功。
此方法檢查目前的可執行檔是否為協定(又稱 URI 方案)的預設處理常式。如果是,它將移除應用程式作為預設處理常式。
app.isDefaultProtocolClient(protocol[, path, args])
protocol
字串 - 您的協定的名稱,不含://
。path
字串 (選用) Windows - 預設為process.execPath
args
字串陣列 (選用) Windows - 預設為空陣列
傳回 boolean
- 目前的可執行檔是否為協定(又稱 URI 方案)的預設處理常式。
注意: 在 macOS 上,您可以使用此方法檢查應用程式是否已註冊為協定的預設協定處理常式。您也可以透過檢查 macOS 電腦上的 ~/Library/Preferences/com.apple.LaunchServices.plist
來驗證這一點。請參閱 Apple 的文件以取得詳細資訊。
API 在內部使用 Windows 登錄和 LSCopyDefaultHandlerForURLScheme
。
app.getApplicationNameForProtocol(url)
url
字串 - 具有要檢查的協定名稱的 URL。與此系列中的其他方法不同,這接受整個 URL,至少包括://
(例如https://
)。
傳回 string
- 處理協定的應用程式名稱,如果沒有處理常式,則傳回空字串。例如,如果 Electron 是 URL 的預設處理常式,則在 Windows 和 Mac 上可能是 Electron
。但是,請勿依賴不保證保持不變的精確格式。預期在 Linux 上會有不同的格式,可能帶有 .desktop
後綴。
此方法傳回 URL 的協定(又稱 URI 方案)的預設處理常式的應用程式名稱。
app.getApplicationInfoForProtocol(url)
macOS Windows
url
字串 - 具有要檢查的協定名稱的 URL。與此系列中的其他方法不同,這接受整個 URL,至少包括://
(例如https://
)。
傳回 Promise<Object>
- 使用包含以下內容的物件 Resolve
icon
NativeImage - 處理協定的應用程式的顯示圖示。path
字串 - 處理協定的應用程式的安裝路徑。name
字串 - 處理協定的應用程式的顯示名稱。
此方法傳回一個 promise,其中包含 URL 的協定(又稱 URI 方案)的預設處理常式的應用程式名稱、圖示和路徑。
app.setUserTasks(tasks)
Windows
tasks
Task[] -Task
物件的陣列
將 tasks
新增至 Windows 上 Jump List 的 Tasks 類別。
tasks
是 Task 物件的陣列。
傳回 boolean
- 呼叫是否成功。
注意: 如果您想更進一步自訂 Jump List,請改用 app.setJumpList(categories)
。
app.getJumpListSettings()
Windows
傳回 Object
minItems
Integer - Jump List 中將顯示的最小項目數(有關此值的更詳細說明,請參閱 MSDN 文件)。removedItems
JumpListItem[] -JumpListItem
物件的陣列,對應於使用者已從 Jump List 中自訂類別明確移除的項目。在下次呼叫app.setJumpList()
時,不得將這些項目重新新增至 Jump List,Windows 將不會顯示包含任何已移除項目的任何自訂類別。
app.setJumpList(categories)
Windows
categories
JumpListCategory[] |null
-JumpListCategory
物件的陣列。
傳回 string
設定或移除應用程式的自訂 Jump List,並傳回以下字串之一
ok
- 一切正常。error
- 發生一個或多個錯誤,啟用執行階段記錄以找出可能的原因。invalidSeparatorError
- 嘗試將分隔符號新增至 Jump List 中的自訂類別。分隔符號僅在標準Tasks
類別中允許。fileTypeRegistrationError
- 嘗試將檔案連結新增至 Jump List,用於應用程式未註冊處理的檔案類型。customCategoryAccessDeniedError
- 由於使用者隱私權或群組原則設定,無法將自訂類別新增至 Jump List。
如果 categories
為 null
,則先前設定的自訂 Jump List(如果有的話)將被應用程式的標準 Jump List(由 Windows 管理)取代。
注意: 如果 JumpListCategory
物件既未設定 type
屬性也未設定 name
屬性,則其 type
假定為 tasks
。如果設定了 name
屬性但省略了 type
屬性,則 type
假定為 custom
。
注意: 使用者可以從自訂類別中移除項目,並且在下次成功呼叫 app.setJumpList(categories)
之後,Windows 將不允許將已移除的項目重新新增到自訂類別中。任何早於此時間嘗試將已移除的項目重新新增到自訂類別的行為,都會導致整個自訂類別從 Jump List 中省略。可以使用 app.getJumpListSettings()
取得已移除項目的清單。
注意: Jump List 項目的 description
屬性的最大長度為 260 個字元。超過此限制,該項目將不會新增到 Jump List,也不會顯示。
這是一個建立自訂 Jump List 的非常簡單的範例
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',
iconPath: process.execPath,
iconIndex: 0,
description: 'Runs Tool A'
},
{
type: 'task',
title: 'Tool B',
program: process.execPath,
args: '--run-tool-b',
iconPath: 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'
}
]
}
])
app.requestSingleInstanceLock([additionalData])
additionalData
Record<any, any> (選用) - 包含要傳送至第一個執行個體的額外資料的 JSON 物件。
傳回 boolean
此方法的傳回值指示您的應用程式的此執行個體是否成功取得鎖定。如果它未能取得鎖定,您可以假設您的應用程式的另一個執行個體已在鎖定下執行,並立即結束。
即,如果您的程序是應用程式的主要執行個體,且您的應用程式應繼續載入,則此方法傳回 true
。如果您的程序應立即結束,因為它已將其參數傳送至另一個已取得鎖定的執行個體,則傳回 false
。
在 macOS 上,當使用者嘗試在 Finder 中開啟應用程式的第二個執行個體時,系統會自動強制執行單一執行個體,並且將為其發出 open-file
和 open-url
事件。但是,當使用者在命令列中啟動您的應用程式時,系統的單一執行個體機制將被繞過,您必須使用此方法來確保單一執行個體。
當第二個執行個體啟動時,啟動主要執行個體視窗的範例
const { app, BrowserWindow } = require('electron')
let myWindow = null
const additionalData = { myKey: 'myValue' }
const gotTheLock = app.requestSingleInstanceLock(additionalData)
if (!gotTheLock) {
app.quit()
} else {
app.on('second-instance', (event, commandLine, workingDirectory, additionalData) => {
// Print out data received from the second instance.
console.log(additionalData)
// Someone tried to run a second instance, we should focus our window.
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore()
myWindow.focus()
}
})
app.whenReady().then(() => {
myWindow = new BrowserWindow({})
myWindow.loadURL('https://electron.dev.org.tw')
})
}
app.hasSingleInstanceLock()
傳回 boolean
此方法傳回您的應用程式的此執行個體目前是否持有單一執行個體鎖定。您可以使用 app.requestSingleInstanceLock()
請求鎖定,並使用 app.releaseSingleInstanceLock()
釋放鎖定
app.releaseSingleInstanceLock()
釋放由 requestSingleInstanceLock
建立的所有鎖定。這將允許應用程式的多個執行個體再次並排執行。
app.setUserActivity(type, userInfo[, webpageURL])
macOS
type
字串 - 唯一識別活動。對應到NSUserActivity.activityType
。userInfo
any - 應用程式特定的狀態,用於儲存以供其他裝置使用。webpageURL
字串 (選用) - 如果在恢復裝置上未安裝合適的應用程式,則要在瀏覽器中載入的網頁。方案必須為http
或https
。
建立 NSUserActivity
並將其設定為目前活動。該活動有資格在之後 Handoff 到另一個裝置。
app.getCurrentActivityType()
macOS
傳回 string
- 目前正在執行的活動類型。
app.invalidateCurrentActivity()
macOS
使目前的 Handoff 使用者活動失效。
app.resignCurrentActivity()
macOS
將目前的 Handoff 使用者活動標記為非活動狀態,但不使其失效。
app.updateCurrentActivity(type, userInfo)
macOS
type
字串 - 唯一識別活動。對應到NSUserActivity.activityType
。userInfo
any - 應用程式特定的狀態,用於儲存以供其他裝置使用。
如果目前活動的類型與 type
相符,則更新目前活動,將 userInfo
中的項目合併到其目前的 userInfo
字典中。
app.setAppUserModelId(id)
Windows
id
字串
將 應用程式使用者模型 ID 變更為 id
。
app.setActivationPolicy(policy)
macOS
policy
字串 - 可以是 'regular'、'accessory' 或 'prohibited'。
設定指定應用程式的啟用原則。
啟用原則類型
- 'regular' - 應用程式是一個普通的應用程式,會出現在 Dock 中,並且可能具有使用者介面。
- 'accessory' - 應用程式不會出現在 Dock 中,也沒有選單列,但可以透過程式設計或按一下其視窗之一來啟用。
- 'prohibited' - 應用程式不會出現在 Dock 中,並且可能無法建立視窗或啟用。
app.importCertificate(options, callback)
Linux
callback
函數result
Integer - 匯入結果。
將 pkcs12 格式的憑證匯入到平台憑證儲存區中。callback
會以匯入操作的 result
呼叫,值為 0
表示成功,而任何其他值表示根據 Chromium net_error_list 失敗。
app.configureHostResolver(options)
設定主機解析(DNS 和 DNS over HTTPS)。預設情況下,將按順序使用以下解析器
- DNS over HTTPS,如果 DNS 提供者支援它,然後
- 內建解析器(預設僅在 macOS 上啟用),然後
- 系統的解析器(例如
getaddrinfo
)。
可以將其設定為限制非加密 DNS 的使用 (secureDnsMode: "secure"
),或停用 DNS over HTTPS (secureDnsMode: "off"
)。也可以啟用或停用內建解析器。
若要停用不安全的 DNS,您可以指定 secureDnsMode
為 "secure"
。如果您這樣做,您應確保提供要使用的 DNS over HTTPS 伺服器清單,以防使用者的 DNS 組態不包含支援 DoH 的提供者。
const { app } = require('electron')
app.whenReady().then(() => {
app.configureHostResolver({
secureDnsMode: 'secure',
secureDnsServers: [
'https://cloudflare-dns.com/dns-query'
]
})
})
此 API 必須在發出 ready
事件後呼叫。
app.disableHardwareAcceleration()
停用目前應用程式的硬體加速。
此方法只能在應用程式準備就緒之前呼叫。
app.disableDomainBlockingFor3DAPIs()
預設情況下,如果 GPU 程序崩潰太頻繁,Chromium 會在每個網域的基礎上停用 3D API(例如 WebGL),直到重新啟動。此函數會停用該行為。
此方法只能在應用程式準備就緒之前呼叫。
app.getAppMetrics()
傳回 ProcessMetric[]:ProcessMetric
物件的陣列,對應於與應用程式相關聯的所有程序的記憶體和 CPU 使用率統計資訊。
app.getGPUFeatureStatus()
傳回 GPUFeatureStatus - 來自 chrome://gpu/
的圖形功能狀態。
注意: 此資訊僅在發出 gpu-info-update
事件後才可使用。
app.getGPUInfo(infoType)
infoType
字串 - 可以是basic
或complete
。
傳回 Promise<unknown>
對於 infoType
等於 complete
:Promise 以 Object
fulfilled,其中包含 chromium 的 GPUInfo 物件中的所有 GPU 資訊。這包括 chrome://gpu
頁面上顯示的版本和驅動程式資訊。
對於 infoType
等於 basic
:Promise 以 Object
fulfilled,其中包含的屬性比使用 complete
請求時更少。以下是基本回應的範例
{
auxAttributes:
{
amdSwitchable: true,
canSupportThreadedTextureMailbox: false,
directComposition: false,
directRendering: true,
glResetNotificationStrategy: 0,
inProcessGpu: true,
initializationTime: 0,
jpegDecodeAcceleratorSupported: false,
optimus: false,
passthroughCmdDecoder: false,
sandboxed: false,
softwareRendering: false,
supportsOverlays: false,
videoDecodeAcceleratorFlags: 0
},
gpuDevice:
[{ active: true, deviceId: 26657, vendorId: 4098 },
{ active: false, deviceId: 3366, vendorId: 32902 }],
machineModelName: 'MacBookPro',
machineModelVersion: '11.5'
}
如果只需要 vendorId
或 deviceId
等基本資訊,則應優先使用 basic
。
app.setBadgeCount([count])
Linux macOS
count
Integer (選用) - 如果提供值,則將徽章設定為提供的值,否則在 macOS 上,顯示純白色點(例如,未知的通知數)。在 Linux 上,如果未提供值,則徽章將不會顯示。
傳回 boolean
- 呼叫是否成功。
設定目前應用程式的計數器徽章。將計數設為 0
將會隱藏徽章。
在 macOS 上,它會顯示在 Dock 圖示上。在 Linux 上,僅適用於 Unity 啟動器。
注意: Unity 啟動器需要 .desktop
檔案才能運作。如需更多資訊,請參閱Unity 整合文件。
注意: 在 macOS 上,您需要確保您的應用程式具有顯示通知的權限,此方法才能運作。
app.getBadgeCount()
Linux macOS
傳回 Integer
- 計數器徽章中顯示的目前值。
app.isUnityRunning()
Linux
傳回 boolean
- 目前的桌面環境是否為 Unity 啟動器。
app.getLoginItemSettings([options])
macOS Windows
如果您為 app.setLoginItemSettings
提供了 path
和 args
選項,則您需要在此處傳遞相同的引數,才能正確設定 openAtLogin
。
傳回 Object
openAtLogin
boolean - 如果應用程式設定為在登入時開啟,則為true
。openAsHidden
boolean macOS 已棄用 - 如果應用程式設定為在登入時隱藏開啟,則為true
。這在 macOS 13 及更高版本上不起作用。wasOpenedAtLogin
boolean macOS - 如果應用程式是在登入時自動開啟的,則為true
。wasOpenedAsHidden
boolean macOS 已棄用 - 如果應用程式是作為隱藏的登入項目開啟的,則為true
。這表示應用程式不應在啟動時開啟任何視窗。此設定在 MAS 版本或 macOS 13 及更高版本上不可用。restoreState
boolean macOS 已棄用 - 如果應用程式是作為應從先前工作階段還原狀態的登入項目開啟的,則為true
。這表示應用程式應還原上次應用程式關閉時開啟的視窗。此設定在 MAS 版本或 macOS 13 及更高版本上不可用。status
string macOS - 可以是not-registered
、enabled
、requires-approval
或not-found
其中之一。executableWillLaunchAtLogin
boolean Windows - 如果應用程式設定為在登入時開啟,且其執行鍵未停用,則為true
。這與openAtLogin
不同,因為它忽略了args
選項,如果給定的執行檔將在登入時使用任何引數啟動,則此屬性將為 true。launchItems
Object[] Windowsname
string Windows - 登錄項目的名稱值。path
string Windows - 對應於登錄項目的應用程式執行檔。args
string[] Windows - 傳遞給執行檔的命令列引數。scope
string Windows -user
或machine
其中之一。表示登錄項目是在HKEY_CURRENT USER
或HKEY_LOCAL_MACHINE
下。enabled
boolean Windows - 如果應用程式登錄機碼已啟動核准,因此在工作管理員和 Windows 設定中顯示為enabled
,則為true
。
app.setLoginItemSettings(settings)
macOS Windows
settings
ObjectopenAtLogin
boolean (選用) -true
可在登入時開啟應用程式,false
可移除應用程式作為登入項目。預設為false
。openAsHidden
boolean (選用) macOS 已棄用 -true
可將應用程式隱藏開啟。預設為false
。使用者可以從「系統偏好設定」編輯此設定,因此在應用程式開啟時應檢查app.getLoginItemSettings().wasOpenedAsHidden
以了解目前值。此設定在 MAS 版本或 macOS 13 及更高版本上不可用。type
string (選用) macOS - 要作為登入項目新增的服務類型。預設為mainAppService
。僅適用於 macOS 13 及更高版本。mainAppService
- 主要應用程式。agentService
- 啟動代理程式的屬性列表名稱。屬性列表名稱必須對應於應用程式Contents/Library/LaunchAgents
目錄中的屬性列表。daemonService
string (選用) macOS - 啟動代理程式的屬性列表名稱。屬性列表名稱必須對應於應用程式Contents/Library/LaunchDaemons
目錄中的屬性列表。loginItemService
string (選用) macOS - 登入項目服務的屬性列表名稱。屬性列表名稱必須對應於應用程式Contents/Library/LoginItems
目錄中的屬性列表。
serviceName
string (選用) macOS - 服務的名稱。如果type
不是預設值,則為必填。僅適用於 macOS 13 及更高版本。path
string (選用) Windows - 登入時要啟動的執行檔。預設為process.execPath
。args
string[] (選用) Windows - 傳遞給執行檔的命令列引數。預設為空陣列。請注意將路徑包含在引號中。enabled
boolean (選用) Windows -true
將變更啟動核准的登錄機碼,並在工作管理員和 Windows 設定中啟用 / 停用
應用程式。預設為true
。name
string (選用) Windows - 要寫入登錄的 Value Name。預設為應用程式的 AppUserModelId()。
設定應用程式的登入項目設定。
為了在 Windows 上使用 Electron 的 autoUpdater
(其使用 Squirrel),您會希望將啟動路徑設定為執行檔名稱,但在目錄中向上移動一層,這是一個由 Squirrel 自動產生的 Stub 應用程式,它將自動啟動最新版本。
const { app } = require('electron')
const path = require('node:path')
const appFolder = path.dirname(process.execPath)
const ourExeName = path.basename(process.execPath)
const stubLauncher = path.resolve(appFolder, '..', ourExeName)
app.setLoginItemSettings({
openAtLogin: true,
path: stubLauncher,
args: [
// You might want to pass a parameter here indicating that this
// app was launched via login, but you don't have to
]
})
有關在 macOS 13 及更高版本上設定不同服務作為登入項目的更多資訊,請參閱 SMAppService
。
app.isAccessibilitySupportEnabled()
macOS Windows
傳回 boolean
- 如果 Chrome 的輔助功能支援已啟用,則為 true
,否則為 false
。如果偵測到輔助技術(例如螢幕閱讀器)的使用,則此 API 將傳回 true
。有關更多詳細資訊,請參閱 https://www.chromium.org/developers/design-documents/accessibility。
app.setAccessibilitySupportEnabled(enabled)
macOS Windows
enabled
boolean - 啟用或停用輔助功能樹狀結構渲染
手動啟用 Chrome 的輔助功能支援,允許在應用程式設定中向使用者公開輔助功能切換。有關更多詳細資訊,請參閱 Chromium 的輔助功能文件。預設為停用。
此 API 必須在發出 ready
事件後呼叫。
注意: 渲染輔助功能樹狀結構可能會顯著影響應用程式的效能。預設情況下不應啟用它。
app.showAboutPanel()
顯示應用程式的「關於」面板選項。這些選項可以使用 app.setAboutPanelOptions(options)
覆寫。此函數以非同步方式執行。
app.setAboutPanelOptions(options)
設定「關於」面板選項。這將覆寫 macOS 上應用程式 .plist
檔案中定義的值。有關更多詳細資訊,請參閱 Apple 文件。在 Linux 上,必須設定值才能顯示;沒有預設值。
如果您未設定 credits
但仍希望在您的應用程式中顯示它們,AppKit 將依序在 NSBundle 類別方法 main 傳回的 Bundle 中尋找名為 "Credits.html"、"Credits.rtf" 和 "Credits.rtfd" 的檔案。將使用找到的第一個檔案,如果找不到任何檔案,資訊區域將留空。有關更多資訊,請參閱 Apple 文件。
app.isEmojiPanelSupported()
傳回 boolean
- 目前的作業系統版本是否允許使用原生表情符號選擇器。
app.showEmojiPanel()
macOS Windows
顯示平台的原生表情符號選擇器。
app.startAccessingSecurityScopedResource(bookmarkData)
MAS
bookmarkData
string - 由dialog.showOpenDialog
或dialog.showSaveDialog
方法傳回的 Base64 編碼安全範圍書籤資料。
傳回 Function
- 一旦您完成存取安全範圍檔案,必須呼叫此函數。如果您忘記停止存取書籤,則核心資源將會洩漏,並且您的應用程式將完全失去存取沙箱外部的能力,直到您的應用程式重新啟動。
const { app, dialog } = require('electron')
const fs = require('node:fs')
let filepath
let bookmark
dialog.showOpenDialog(null, { securityScopedBookmarks: true }).then(({ filePaths, bookmarks }) => {
filepath = filePaths[0]
bookmark = bookmarks[0]
fs.readFileSync(filepath)
})
// ... restart app ...
const stopAccessingSecurityScopedResource = app.startAccessingSecurityScopedResource(bookmark)
fs.readFileSync(filepath)
stopAccessingSecurityScopedResource()
開始存取安全範圍資源。透過此方法,為 Mac App Store 打包的 Electron 應用程式可以超出其沙箱範圍,以存取使用者選擇的檔案。有關此系統如何運作的說明,請參閱 Apple 的文件。
app.enableSandbox()
在應用程式上啟用完整沙箱模式。這表示所有渲染器都將以沙箱模式啟動,無論 WebPreferences
中的 sandbox
旗標值為何。
此方法只能在應用程式準備就緒之前呼叫。
app.isInApplicationsFolder()
macOS
傳回 boolean
- 應用程式目前是否從系統的「應用程式」資料夾執行。與 app.moveToApplicationsFolder()
結合使用
app.moveToApplicationsFolder([options])
macOS
傳回 boolean
- 移動是否成功。請注意,如果移動成功,您的應用程式將會結束並重新啟動。
預設情況下不會顯示確認對話方塊。如果您希望允許使用者確認操作,您可以使用 dialog
API 進行操作。
注意: 如果除了使用者之外的任何原因導致移動失敗,此方法會擲回錯誤。例如,如果使用者取消授權對話方塊,此方法會傳回 false。如果我們無法執行複製,則此方法將會擲回錯誤。錯誤中的訊息應具有資訊性,並確切告訴您哪裡出錯。
預設情況下,如果「應用程式」目錄中存在與要移動的應用程式同名的應用程式,且該應用程式未執行,則現有的應用程式將被丟棄,而活動應用程式將移動到其位置。如果它正在執行,則先前存在的執行中應用程式將取得焦點,而先前活動的應用程式將自行結束。此行為可以透過提供選用的衝突處理常式來變更,其中處理常式傳回的布林值決定是否使用預設行為解決移動衝突。即,傳回 false
將確保不採取進一步的動作,傳回 true
將導致預設行為,且方法繼續執行。
例如
const { app, dialog } = require('electron')
app.moveToApplicationsFolder({
conflictHandler: (conflictType) => {
if (conflictType === 'exists') {
return dialog.showMessageBoxSync({
type: 'question',
buttons: ['Halt Move', 'Continue Move'],
defaultId: 0,
message: 'An app of this name already exists'
}) === 1
}
}
})
這表示,如果使用者目錄中已存在應用程式,如果使用者選擇「繼續移動」,則函數將繼續其預設行為,且現有的應用程式將被丟棄,而活動應用程式將移動到其位置。
app.isSecureKeyboardEntryEnabled()
macOS
傳回 boolean
- 是否啟用 安全鍵盤輸入
。
預設情況下,此 API 將傳回 false
。
app.setSecureKeyboardEntryEnabled(enabled)
macOS
enabled
boolean - 啟用或停用安全鍵盤輸入
在您的應用程式中設定是否啟用 安全鍵盤輸入
。
透過使用此 API,可以防止密碼和其他敏感資訊等重要資訊被其他程序攔截。
有關更多詳細資訊,請參閱 Apple 的文件。
注意: 僅在需要時啟用 安全鍵盤輸入
,並在不再需要時停用它。
app.setProxy(config)
config
ProxyConfig
傳回 Promise<void>
- 當 Proxy 設定程序完成時解析。
設定沒有關聯 Session 的網路請求的 Proxy 設定。目前這將影響在工具程序中使用 Net 發出的請求,以及執行階段發出的內部請求 (例如:地理位置查詢)。
此方法只能在 app 準備就緒後呼叫。
app.resolveProxy(url)
url
URL
傳回 Promise<string>
- 解析為 url
的 Proxy 資訊,該資訊將在嘗試使用 Net 在工具程序中發出請求時使用。
app.setClientCertRequestPasswordHandler(handler)
Linux
-
handler
Function<Promise<string>>clientCertRequestParams
Objecthostname
string - 需要用戶端憑證的站點主機名稱tokenName
string - 密碼編譯裝置的 Token (或插槽) 名稱isRetry
boolean - 先前是否嘗試提示密碼失敗
傳回
Promise<string>
- 使用密碼解析
當需要密碼才能解鎖 hostname
的用戶端憑證時,會呼叫處理常式。
const { app } = require('electron')
async function passwordPromptUI (text) {
return new Promise((resolve, reject) => {
// display UI to prompt user for password
// ...
// ...
resolve('the password')
})
}
app.setClientCertRequestPasswordHandler(async ({ hostname, tokenName, isRetry }) => {
const text = `Please sign in to ${tokenName} to authenticate to ${hostname} with your certificate`
const password = await passwordPromptUI(text)
return password
})
屬性
app.accessibilitySupportEnabled
macOS Windows
一個 boolean
屬性,如果 Chrome 的輔助功能支援已啟用,則為 true
,否則為 false
。如果偵測到輔助技術(例如螢幕閱讀器)的使用,則此屬性將為 true
。將此屬性手動設定為 true
會啟用 Chrome 的輔助功能支援,允許開發人員在應用程式設定中向使用者公開輔助功能切換。
有關更多詳細資訊,請參閱 Chromium 的輔助功能文件。預設為停用。
此 API 必須在發出 ready
事件後呼叫。
注意: 渲染輔助功能樹狀結構可能會顯著影響應用程式的效能。預設情況下不應啟用它。
app.applicationMenu
一個 Menu | null
屬性,如果已設定 Menu
則傳回該物件,否則傳回 null
。使用者可以傳遞 Menu 來設定此屬性。
app.badgeCount
Linux macOS
一個 Integer
屬性,傳回目前應用程式的徽章計數。將計數設為 0
將會隱藏徽章。
在 macOS 上,使用任何非零整數設定此屬性都會顯示在 Dock 圖示上。在 Linux 上,此屬性僅適用於 Unity 啟動器。
注意: Unity 啟動器需要 .desktop
檔案才能運作。如需更多資訊,請參閱Unity 整合文件。
注意: 在 macOS 上,您需要確保您的應用程式具有顯示通知的權限,此屬性才能生效。
app.commandLine
唯讀
一個 CommandLine
物件,允許您讀取和操作 Chromium 使用的命令列引數。
app.dock
macOS 唯讀
一個 Dock
| undefined
物件,允許您在 macOS 上對使用者 Dock 中的應用程式圖示執行操作。
app.isPackaged
唯讀
一個 boolean
屬性,如果應用程式已封裝,則傳回 true
,否則傳回 false
。對於許多應用程式,此屬性可用於區分開發和生產環境。
app.name
一個 string
屬性,指示目前應用程式的名稱,這是應用程式 package.json
檔案中的名稱。
通常,根據 npm modules spec,package.json
的 name
欄位是一個簡短的小寫名稱。您通常也應該指定一個 productName
欄位,它是您應用程式的完整首字母大寫名稱,Electron 將優先於 name
使用它。
app.userAgentFallback
一個 string
,它是 Electron 將用作全域後備的使用者代理程式字串。
當在 webContents
或 session
層級未設定使用者代理程式時,將使用此使用者代理程式。它對於確保您的整個應用程式具有相同的使用者代理程式非常有用。盡可能在應用程式初始化的早期階段設定為自訂值,以確保使用您的覆寫值。
app.runningUnderARM64Translation
唯讀 macOS Windows
一個 boolean
,當為 true
時表示應用程式目前在 ARM64 轉譯器 (例如 macOS Rosetta 轉譯器環境 或 Windows WOW) 下執行。
您可以透過此屬性提示使用者在錯誤地在 Rosetta 或 WOW 下執行 x64 版本時下載應用程式的 arm64 版本。