app 模塊是為了控制整個應(yīng)用的生命周期設(shè)計的。
下面的這個例子將會展示如何在最后一個窗口被關(guān)閉時退出應(yīng)用:
var app = require('app'); app.on('window-all-closed', function() { app.quit(); });
app 對象會觸發(fā)以下的事件:
當(dāng)應(yīng)用程序完成基礎(chǔ)的啟動的時候被觸發(fā)。在 Windows 和 Linux 中, will-finish-launching 事件與 ready 事件是相同的; 在 OS X 中, 這個時間相當(dāng)于 NSApplication 中的 applicationWillFinishLaunching 提示。 你應(yīng)該經(jīng)常在這里為 open-file 和 open-url 設(shè)置監(jiān)聽器,并啟動崩潰報告和自動更新。
在大多數(shù)的情況下,你應(yīng)該只在 ready 事件處理器中完成所有的業(yè)務(wù)。
當(dāng) Electron 完成初始化時被觸發(fā)。
當(dāng)所有的窗口都被關(guān)閉時觸發(fā)。
這個時間僅在應(yīng)用還沒有退出時才能觸發(fā)。 如果用戶按下了 Cmd + Q, 或者開發(fā)者調(diào)用了 app.quit() ,Electron 將會先嘗試關(guān)閉所有的窗口再觸發(fā) will-quit 事件, 在這種情況下 window-all-closed 不會被觸發(fā)。
返回:
在應(yīng)用程序開始關(guān)閉它的窗口的時候被觸發(fā)。 調(diào)用 event.preventDefault() 將會阻止終止應(yīng)用程序的默認(rèn)行為。
返回:
當(dāng)所有的窗口已經(jīng)被關(guān)閉,應(yīng)用即將退出時被觸發(fā)。 調(diào)用 event.preventDefault() 將會阻止終止應(yīng)用程序的默認(rèn)行為。
你可以在 window-all-closed 事件的描述中看到 will-quit 事件 和 window-all-closed 事件的區(qū)別。
返回:
當(dāng)應(yīng)用程序正在退出時觸發(fā)。
返回:
當(dāng)用戶想要在應(yīng)用中打開一個文件時觸發(fā)。open-file 事件常常在應(yīng)用已經(jīng)打開并且系統(tǒng)想要再次使用應(yīng)用打開文件時被觸發(fā)。 open-file 也會在一個文件被拖入 dock 且應(yīng)用還沒有運(yùn)行的時候被觸發(fā)。 請確認(rèn)在應(yīng)用啟動的時候(甚至在 ready 事件被觸發(fā)前)就對 open-file 事件進(jìn)行監(jiān)聽,以處理這種情況。
如果你想處理這個事件,你應(yīng)該調(diào)用 event.preventDefault() 。 在 Windows系統(tǒng)中,你需要通過解析 process.argv 來獲取文件路徑。
返回:
當(dāng)用戶想要在應(yīng)用中打開一個url的時候被觸發(fā)。URL格式必須要提前標(biāo)識才能被你的應(yīng)用打開。
如果你想處理這個事件,你應(yīng)該調(diào)用 event.preventDefault() 。
返回:
當(dāng)應(yīng)用被激活時觸發(fā),常用于點(diǎn)擊應(yīng)用的 dock 圖標(biāo)的時候。
返回:
當(dāng)一個 BrowserWindow 失去焦點(diǎn)的時候觸發(fā)。
返回:
當(dāng)一個 BrowserWindow 獲得焦點(diǎn)的時候觸發(fā)。
返回:
當(dāng)一個 BrowserWindow 被創(chuàng)建的時候觸發(fā)。
返回:
當(dāng)對 url 驗證 certificate 證書失敗的時候觸發(fā),如果需要信任這個證書,你需要阻止默認(rèn)行為 event.preventDefault() 并且 調(diào)用 callback(true)。
session.on('certificate-error', function(event, webContents, url, error, certificate, callback) { if (url == "https://github.com") { // 驗證邏輯。 event.preventDefault(); callback(true); } else { callback(false); } });
返回:
當(dāng)一個客戶端認(rèn)證被請求的時候被觸發(fā)。
url 指的是請求客戶端認(rèn)證的網(wǎng)頁地址,調(diào)用 callback 時需要傳入一個證書列表中的證書。
需要通過調(diào)用 event.preventDefault() 來防止應(yīng)用自動使用第一個證書進(jìn)行驗證。如下所示:
app.on('select-certificate', function(event, host, url, list, callback) { event.preventDefault(); callback(list[0]); })
返回:
當(dāng) webContents 要做進(jìn)行一次 HTTP 登陸驗證時被觸發(fā)。
默認(rèn)情況下,Electron 會取消所有的驗證行為,如果需要重寫這個行為,你需要用 event.preventDefault() 來阻止默認(rèn)行為,并且 用 callback(username, password) 來進(jìn)行驗證。
app.on('login', function(event, webContents, request, authInfo, callback) { event.preventDefault(); callback('username', 'secret'); })
當(dāng) GPU 進(jìn)程崩潰時觸發(fā)。
app 對象擁有以下的方法:
請注意 有的方法只能用于特定的操作系統(tǒng)。
試圖關(guān)掉所有的窗口。before-quit 事件將會最先被觸發(fā)。如果所有的窗口都被成功關(guān)閉了, will-quit事件將會被觸發(fā),默認(rèn)下應(yīng)用將會被關(guān)閉。
這個方法保證了所有的 beforeunload 和 unload 事件處理器被正確執(zhí)行。假如一個窗口的 beforeunload事件處理器返回 false,那么整個應(yīng)用可能會取消退出。
隱藏所有的應(yīng)用窗口,不是最小化.
隱藏后重新顯示所有的窗口,不會自動選中他們。
帶著exitCode退出應(yīng)用.
所有的窗口會被立刻關(guān)閉,不會詢問用戶。before-quit 和 will-quit 這2個事件不會被觸發(fā)
返回當(dāng)前應(yīng)用所在的文件路徑。
返回一個與 name 參數(shù)相關(guān)的特殊文件夾或文件路徑。當(dāng)失敗時拋出一個 Error 。
你可以通過名稱請求以下的路徑:
重寫某個 name 的路徑為 path,path 可以是一個文件夾或者一個文件,這個和 name 的類型有關(guān)。 如果這個路徑指向的文件夾不存在,這個文件夾將會被這個方法創(chuàng)建。 如果錯誤則會拋出 Error。
name 參數(shù)只能使用 app.getPath 中定義過 name。
默認(rèn)情況下,網(wǎng)頁的 cookie 和緩存都會儲存在 userData 文件夾。 如果你想要改變這個位置,你需要在 app 模塊中的 ready 事件被觸發(fā)之前重寫 userData 的路徑。
返回加載應(yīng)用程序的版本。如果應(yīng)用程序的 package.json 文件中沒有寫版本號, 將會返回當(dāng)前包或者可執(zhí)行文件的版本。
返回當(dāng)前應(yīng)用程序的 package.json 文件中的名稱。
由于 npm 的命名規(guī)則,通常 name 字段是一個短的小寫字符串。但是應(yīng)用名的完整名稱通常是首字母大寫的,你應(yīng)該單獨(dú)使用一個 productName 字段,用于表示你的應(yīng)用程序的完整名稱。Electron 會優(yōu)先使用這個字段作為應(yīng)用名。
重寫當(dāng)前應(yīng)用的名字
返回當(dāng)前應(yīng)用程序的語言。
在最近訪問的文檔列表中添加 path。
這個列表由操作系統(tǒng)進(jìn)行管理。在 Windows 中您可以通過任務(wù)條進(jìn)行訪問,在 OS X 中你可以通過 dock 菜單進(jìn)行訪問。
清除最近訪問的文檔列表。
將 tasks 添加到 Windows 中 JumpList 功能的 Tasks 分類中。
tasks 中的 Task 對象格式如下:
Task Object
動態(tài)設(shè)置是否總是為 HTTP NTLM 或 Negotiate 認(rèn)證發(fā)送證書。通常來說,Electron 只會對本地網(wǎng)絡(luò)(比如和你處在一個域中的計算機(jī))發(fā) 送 NTLM / Kerberos 證書。但是假如網(wǎng)絡(luò)設(shè)置得不太好,可能這個自動探測會失效,所以你可以通過這個接口自定義 Electron 對所有 URL 的行為。
這個方法可以讓你的應(yīng)用在同一時刻最多只會有一個實(shí)例,否則你的應(yīng)用可以被運(yùn)行多次并產(chǎn)生多個實(shí)例。你可以利用這個接口保證只有一個實(shí)例正 常運(yùn)行,其余的實(shí)例全部會被終止并退出。
如果多個實(shí)例同時運(yùn)行,那么第一個被運(yùn)行的實(shí)例中 callback 會以 callback(argv, workingDirectory)的形式被調(diào)用。其余的實(shí)例 會被終止。 argv 是一個包含了這個實(shí)例的命令行參數(shù)列表的數(shù)組,workingDirectory 是這個實(shí)例目前的運(yùn)行目錄。通常來說,我們會用通過將應(yīng)用在 主屏幕上激活,并且取消最小化,來提醒用戶這個應(yīng)用已經(jīng)被打開了。
在 app 的 ready 事件后,callback 才有可能被調(diào)用。
如果當(dāng)前實(shí)例為第一個實(shí)例,那么在這個方法將會返回 false 來保證它繼續(xù)運(yùn)行。否則將會返回 true 來讓它立刻退出。
在 OS X 中,如果用戶通過 Finder、open-file 或者 open-url 打開應(yīng)用,系統(tǒng)會強(qiáng)制確保只有一個實(shí)例在運(yùn)行。但是如果用戶是通過 命令行打開,這個系統(tǒng)機(jī)制會被忽略,所以你仍然需要靠這個方法來保證應(yīng)用為單實(shí)例運(yùn)行的。
下面是一個簡單的例子。我們可以通過這個例子了解如何確保應(yīng)用為單實(shí)例運(yùn)行狀態(tài)。
var myWindow = null; var shouldQuit = app.makeSingleInstance(function(commandLine, workingDirectory) { // 當(dāng)另一個實(shí)例運(yùn)行的時候,這里將會被調(diào)用,我們需要激活應(yīng)用的窗口 if (myWindow) { if (myWindow.isMinimized()) myWindow.restore(); myWindow.focus(); } return true; }); // 這個實(shí)例是多余的實(shí)例,需要退出 if (shouldQuit) { app.quit(); return; } // 創(chuàng)建窗口、繼續(xù)加載應(yīng)用、應(yīng)用邏輯等…… app.on('ready', function() { });
改變當(dāng)前應(yīng)用的 Application User Model ID 為 id.
如果 DWM composition(Aero Glass) 啟用 了,那么這個方法會返回 true,否則是 false。你可以用這個方法來決定是否要開啟透明窗口特效,因為如果用戶沒開啟 DWM,那么透明窗 口特效是無效的。
舉個例子:
let browserOptions = {width: 1000, height: 800}; // 只有平臺支持的時候才使用透明窗口 if (process.platform !== 'win32' || app.isAeroGlassEnabled()) { browserOptions.transparent = true; browserOptions.frame = false; } // 創(chuàng)建窗口 win = new BrowserWindow(browserOptions); // 轉(zhuǎn)到某個網(wǎng)頁 if (browserOptions.transparent) { win.loadURL('file://' + __dirname + '/index.html'); } else { // 沒有透明特效,我們應(yīng)該用某個只包含基本樣式的替代解決方案。 win.loadURL('file://' + __dirname + '/fallback.html'); }
通過可選的參數(shù) value 給 Chromium 中添加一個命令行開關(guān)。
注意 這個方法不會影響 process.argv,我們通常用這個方法控制一些底層 Chromium 行為。
給 Chromium 中直接添加一個命令行參數(shù),這個參數(shù) value 的引號和格式必須正確。
注意 這個方法不會影響 process.argv。
當(dāng)傳入的是 critical 時,dock 中的應(yīng)用將會開始彈跳,直到這個應(yīng)用被激活或者這個請求被取消。
當(dāng)傳入的是 informational 時,dock 中的圖標(biāo)只會彈跳一秒鐘。但是,這個請求仍然會激活,直到應(yīng)用被激活或者請求被取消。
這個方法返回的返回值表示這個請求的 ID。
取消這個 id 對應(yīng)的請求。
設(shè)置應(yīng)用在 dock 中顯示的字符串。
返回應(yīng)用在 dock 中顯示的字符串。
隱藏應(yīng)用在 dock 中的圖標(biāo)。
顯示應(yīng)用在 dock 中的圖標(biāo)。
設(shè)置應(yīng)用的 dock 菜單.
設(shè)置應(yīng)用在 dock 中顯示的圖標(biāo)。
更多建議: