跳到主要內容

app

控制您的應用程式的事件生命週期。

程序: 主程序

以下範例示範如何在最後一個視窗關閉時結束應用程式

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

事件

app 物件會發射以下事件

事件: 'will-finish-launching'

當應用程式完成基本啟動時發射。在 Windows 和 Linux 上,will-finish-launching 事件與 ready 事件相同;在 macOS 上,此事件代表 NSApplicationapplicationWillFinishLaunching 通知。

在大多數情況下,您應該在 ready 事件處理常式中執行所有操作。

事件: 'ready'

傳回

在 Electron 完成初始化後發射一次。在 macOS 上,launchInfo 保留 NSUserNotificationuserInfo,或來自 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-quitwindow-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.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'

傳回

browserWindow 失去焦點時發射。

事件: 'browser-window-focus'

傳回

browserWindow 取得焦點時發射。

事件: 'browser-window-created'

傳回

當建立新的 browserWindow 時發射。

事件: 'web-contents-created'

傳回

當建立新的 webContents 時發射。

事件: 'certificate-error'

傳回

  • event 事件
  • webContents WebContents
  • url 字串
  • error 字串 - 錯誤代碼
  • certificate Certificate
  • callback 函數
    • isTrusted 布林值 - 是否將憑證視為受信任
  • isMainFrame 布林值

當無法驗證 urlcertificate 時發射,要信任憑證,您應該使用 event.preventDefault() 防止預設行為,並呼叫 callback(true)

const { app } = require('electron')

app.on('certificate-error', (event, webContents, url, error, certificate, callback) => {
if (url === 'https://github.com') {
// Verification logic.
event.preventDefault()
callback(true)
} else {
callback(false)
}
})

事件: 'select-client-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 URL
    • pid 數字
  • 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'

傳回

當渲染程序意外消失時發射。這通常是因為它崩潰或被終止。

事件: '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 ServiceContent Decryption Module ServiceNetwork ServiceVideo Capture 等。

當子程序意外消失時發射。這通常是因為它崩潰或被終止。它不包含渲染程序。

事件: 'accessibility-support-changed' macOS Windows

傳回

  • event 事件
  • accessibilitySupportEnabled 布林值 - true 表示 Chrome 的輔助功能支援已啟用,false 表示未啟用。

當 Chrome 的輔助功能支援變更時發射。當輔助技術(例如螢幕閱讀器)啟用或停用時,會觸發此事件。請參閱 https://www.chromium.org/developers/design-documents/accessibility 以取得更多詳細資訊。

事件: 'session-created'

傳回

當 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 陣列將不包含引數。

此事件保證在 appready 事件發射後發射。

注意: Chromium 可能會新增額外的命令列引數,例如 --original-process-start-time

方法

app 物件具有以下方法

注意: 某些方法僅在特定的作業系統上可用,並標示為如此。

app.quit()

嘗試關閉所有視窗。將首先發射 before-quit 事件。如果所有視窗都成功關閉,將發射 will-quit 事件,並且預設情況下應用程式將終止。

此方法保證所有 beforeunloadunload 事件處理常式都會正確執行。視窗可能會透過在 beforeunload 事件處理常式中傳回 false 來取消結束。

app.exit([exitCode])

  • exitCode 整數 (選用)

使用 exitCode 立即結束。exitCode 預設為 0。

所有視窗將立即關閉,而不會詢問使用者,並且不會發射 before-quitwill-quit 事件。

app.relaunch([options])

  • options 物件 (選用)
    • args 字串[] (選用)
    • execPath 字串 (選用)

當目前的執行個體結束時重新啟動應用程式。

預設情況下,新的執行個體將使用與目前執行個體相同的工作目錄和命令列引數。當指定 args 時,args 將作為命令列引數傳遞。當指定 execPath 時,將執行 execPath 以進行重新啟動,而不是目前的應用程式。

請注意,此方法在執行時不會結束應用程式。您必須在呼叫 app.relaunch 後呼叫 app.quitapp.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])

  • options 物件 (選用)
    • steal 布林值 macOS - 即使另一個應用程式目前處於活動狀態,也使接收器成為活動應用程式。

在 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,在 LinuxWindows 上設定在 userData 目錄內。

app.getAppPath()

傳回 string - 目前的應用程式目錄。

app.getPath(name)

  • name 字串 - 您可以按名稱請求以下路徑
    • home 使用者的主目錄。
    • appData 每個使用者的應用程式資料目錄,預設情況下指向
      • Windows 上的 %APPDATA%
      • Linux 上的 $XDG_CONFIG_HOME~/.config
      • macOS 上的 ~/Library/Application Support
    • 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 字串
  • options 物件 (選用)
    • size 字串
      • small - 16x16
      • normal - 32x32
      • large - 在 Linux 上為 48x48,在 Windows 上為 32x32,在 macOS 上不支援。

傳回 Promise<NativeImage> - 以應用程式圖示 fulfilled,其為 NativeImage

擷取路徑相關聯的圖示。

Windows 上,有 2 種圖示

  • 與特定檔案副檔名相關聯的圖示,例如 .mp3.png 等。
  • 檔案本身內部的圖示,例如 .exe.dll.ico

LinuxmacOS 上,圖示取決於與檔案 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.jsonname 欄位是一個簡短的小寫名稱。您通常也應該指定一個 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 ForgeElectron 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 類別。

tasksTask 物件的陣列。

傳回 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

傳回 string

設定或移除應用程式的自訂 Jump List,並傳回以下字串之一

  • ok - 一切正常。
  • error - 發生一個或多個錯誤,啟用執行階段記錄以找出可能的原因。
  • invalidSeparatorError - 嘗試將分隔符號新增至 Jump List 中的自訂類別。分隔符號僅在標準 Tasks 類別中允許。
  • fileTypeRegistrationError - 嘗試將檔案連結新增至 Jump List,用於應用程式未註冊處理的檔案類型。
  • customCategoryAccessDeniedError - 由於使用者隱私權或群組原則設定,無法將自訂類別新增至 Jump List。

如果 categoriesnull,則先前設定的自訂 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-fileopen-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 字串 (選用) - 如果在恢復裝置上未安裝合適的應用程式,則要在瀏覽器中載入的網頁。方案必須為 httphttps

建立 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

  • options 物件
    • certificate 字串 - pkcs12 檔案的路徑。
    • password 字串 - 憑證的密碼。
  • callback 函數
    • result Integer - 匯入結果。

將 pkcs12 格式的憑證匯入到平台憑證儲存區中。callback 會以匯入操作的 result 呼叫,值為 0 表示成功,而任何其他值表示根據 Chromium net_error_list 失敗。

app.configureHostResolver(options)

  • options 物件
    • enableBuiltInResolver boolean (選用) - 內建主機解析器是否優先於 getaddrinfo 使用。啟用後,內建解析器將嘗試使用系統的 DNS 設定自行執行 DNS 查找。預設在 macOS 上啟用,預設在 Windows 和 Linux 上停用。
    • secureDnsMode 字串 (選用) - 可以是 'off'、'automatic' 或 'secure'。設定 DNS over HTTP 模式。當為 'off' 時,不會執行 DoH 查找。當為 'automatic' 時,如果 DoH 可用,則會先執行 DoH 查找,然後將不安全的 DNS 查找作為後備方案執行。當為 'secure' 時,只會執行 DoH 查找。預設為 'automatic'。
    • secureDnsServers string[] (選用) - DNS over HTTP 伺服器範本的清單。有關範本格式的詳細資訊,請參閱 RFC8484 § 3。大多數伺服器都支援 POST 方法;此類伺服器的範本只是一個 URI。請注意,對於某些 DNS 提供者,除非明確停用 DoH,否則解析器將自動升級到 DoH,即使此清單中沒有提供 DoH 伺服器。
    • enableAdditionalDnsQueryTypes boolean (選用) - 控制除了傳統的 A 和 AAAA 查詢之外,當透過不安全的 DNS 發出請求時,是否允許其他 DNS 查詢類型,例如 HTTPS(DNS 類型 65)。對始終允許其他類型的安全 DNS 沒有影響。預設為 true。

設定主機解析(DNS 和 DNS over HTTPS)。預設情況下,將按順序使用以下解析器

  1. DNS over HTTPS,如果 DNS 提供者支援它,然後
  2. 內建解析器(預設僅在 macOS 上啟用),然後
  3. 系統的解析器(例如 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 字串 - 可以是 basiccomplete

傳回 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'
}

如果只需要 vendorIddeviceId 等基本資訊,則應優先使用 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

  • options 物件 (選用)
    • type string (選用) macOS - 可以是 mainAppServiceagentServicedaemonServiceloginItemService 其中之一。預設為 mainAppService。僅適用於 macOS 13 及更高版本。有關每種類型的更多資訊,請參閱app.setLoginItemSettings
    • serviceName string (選用) macOS - 服務的名稱。如果 type 不是預設值,則為必填。僅適用於 macOS 13 及更高版本。
    • path string (選用) Windows - 要比較的執行檔路徑。預設為 process.execPath
    • args string[] (選用) Windows - 要比較的命令列引數。預設為空陣列。

如果您為 app.setLoginItemSettings 提供了 pathargs 選項,則您需要在此處傳遞相同的引數,才能正確設定 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-registeredenabledrequires-approvalnot-found 其中之一。
  • executableWillLaunchAtLogin boolean Windows - 如果應用程式設定為在登入時開啟,且其執行鍵未停用,則為 true。這與 openAtLogin 不同,因為它忽略了 args 選項,如果給定的執行檔將在登入時使用任何引數啟動,則此屬性將為 true。
  • launchItems Object[] Windows
    • name string Windows - 登錄項目的名稱值。
    • path string Windows - 對應於登錄項目的應用程式執行檔。
    • args string[] Windows - 傳遞給執行檔的命令列引數。
    • scope string Windows - usermachine 其中之一。表示登錄項目是在 HKEY_CURRENT USERHKEY_LOCAL_MACHINE 下。
    • enabled boolean Windows - 如果應用程式登錄機碼已啟動核准,因此在工作管理員和 Windows 設定中顯示為 enabled,則為 true

app.setLoginItemSettings(settings) macOS Windows

  • settings Object
    • openAtLogin 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

手動啟用 Chrome 的輔助功能支援,允許在應用程式設定中向使用者公開輔助功能切換。有關更多詳細資訊,請參閱 Chromium 的輔助功能文件。預設為停用。

此 API 必須在發出 ready 事件後呼叫。

注意: 渲染輔助功能樹狀結構可能會顯著影響應用程式的效能。預設情況下不應啟用它。

app.showAboutPanel()

顯示應用程式的「關於」面板選項。這些選項可以使用 app.setAboutPanelOptions(options) 覆寫。此函數以非同步方式執行。

app.setAboutPanelOptions(options)

  • options 物件
    • applicationName string (選用) - 應用程式的名稱。
    • applicationVersion string (選用) - 應用程式的版本。
    • copyright string (選用) - 版權資訊。
    • version string (選用) macOS - 應用程式的建置版本號碼。
    • credits string (選用) macOS Windows - 貢獻者資訊。
    • authors string[] (選用) Linux - 應用程式作者列表。
    • website string (選用) Linux - 應用程式的網站。
    • iconPath string (選用) Linux Windows - 應用程式圖示的路徑,格式為 JPEG 或 PNG 檔案。在 Linux 上,將以 64x64 像素顯示,同時保留長寬比。在 Windows 上,48x48 PNG 將產生最佳視覺品質。

設定「關於」面板選項。這將覆寫 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.showOpenDialogdialog.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

  • options 物件 (選用)
    • conflictHandler Function<boolean> (選用) - 移動失敗時潛在衝突的處理常式。
      • conflictType string - 處理常式遇到的移動衝突類型;可以是 existsexistsAndRunning,其中 exists 表示「應用程式」目錄中存在同名的應用程式,而 existsAndRunning 表示它既存在又正在執行。

傳回 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)

傳回 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 Object
      • hostname 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.jsonname 欄位是一個簡短的小寫名稱。您通常也應該指定一個 productName 欄位,它是您應用程式的完整首字母大寫名稱,Electron 將優先於 name 使用它。

app.userAgentFallback

一個 string,它是 Electron 將用作全域後備的使用者代理程式字串。

當在 webContentssession 層級未設定使用者代理程式時,將使用此使用者代理程式。它對於確保您的整個應用程式具有相同的使用者代理程式非常有用。盡可能在應用程式初始化的早期階段設定為自訂值,以確保使用您的覆寫值。

app.runningUnderARM64Translation 唯讀 macOS Windows

一個 boolean,當為 true 時表示應用程式目前在 ARM64 轉譯器 (例如 macOS Rosetta 轉譯器環境 或 Windows WOW) 下執行。

您可以透過此屬性提示使用者在錯誤地在 Rosetta 或 WOW 下執行 x64 版本時下載應用程式的 arm64 版本。