應用程式執行階段和事件頁面會負責管理應用程式的生命週期。應用程式執行階段可以管理應用程式安裝、控制事件頁面,而且隨時可以關閉應用程式。事件頁面會監聽應用程式執行階段的事件,並管理要啟動的項目和啟動方式。
生命週期的運作方式
應用程式執行階段會從使用者桌面載入事件頁面,並觸發 onLaunch()
事件。這個事件會告知事件頁面要啟動的視窗和其尺寸。
如果事件頁面沒有執行中的 JavaScript、沒有待處理的回呼,也沒有開啟的視窗,則執行階段會卸載事件頁面並關閉應用程式。在卸載事件頁面之前,系統會觸發 onSuspend()
事件。這可讓事件頁面在應用程式關閉前執行簡單的清理工作。
建立活動頁面和視窗
所有應用程式都必須有活動頁面。這個頁面包含應用程式的頂層邏輯,且沒有自己的 UI,負責為所有其他應用程式頁面建立視窗。
建立活動頁面
如要建立活動頁面,請在應用程式資訊清單中加入「background」欄位,並在指令碼陣列中加入 background.js
。事件頁面使用的所有程式庫指令碼都必須先新增至「背景」欄位:
"background": {
"scripts": [
"foo.js",
"background.js"
]
}
事件頁面必須包含 onLaunched()
函式。應用程式以任何方式啟動時,系統會呼叫此函式:
chrome.app.runtime.onLaunched.addListener(function() {
// Tell your app what to launch and how.
});
建立視窗
活動頁面可視需要建立一或多個視窗。根據預設,這些視窗會透過與事件頁面建立的腳本連結建立,且可由事件頁面直接編寫腳本。
Chrome 應用程式中的視窗不會與任何 Chrome 瀏覽器視窗建立關聯。這些視窗具有選用的邊框,其中包含標題列和大小控制項,以及建議的視窗 ID。重新啟動後,沒有 ID 的視窗不會還原為原始大小和位置。
以下是使用 background.js
建立的範例視窗:
chrome.app.runtime.onLaunched.addListener(function() {
chrome.app.window.create('main.html', {
id: 'MyWindowID',
bounds: {
width: 800,
height: 600,
left: 100,
top: 100
},
minWidth: 800,
minHeight: 600
});
});
包含啟動資料
視應用程式啟動方式而定,您可能需要在事件頁面中處理啟動資料。根據預設,當應用程式啟動器啟動應用程式時,系統不會提供啟動資料。如果應用程式有檔案處理常式,您需要處理 launchData.items
參數,才能讓應用程式可透過檔案啟動。
監聽應用程式執行階段事件
應用程式執行階段可控管應用程式的安裝、更新和解除安裝作業。您不需要採取任何行動即可設定應用程式執行階段,但事件頁面可以監聽 onInstalled()
事件,在事件頁面卸載前儲存本機設定,以及監聽 onSuspend()
事件,執行簡單的清理工作。
儲存本機設定
當應用程式首次安裝或更新時,系統會呼叫 chrome.runtime.onInstalled()
。每次呼叫此函式時,系統都會觸發 onInstalled
事件。事件頁面可監聽此事件,並使用 Storage API 儲存及更新本機設定 (另請參閱「儲存空間選項」)。
chrome.runtime.onInstalled.addListener(function() {
chrome.storage.local.set(object items, function callback);
});
防止資料遺失
使用者隨時可以解除安裝您的應用程式。解除安裝時,不會留下任何執行中的程式碼或私人資料。使用者可能會解除安裝已在本機編輯但尚未同步的資料,因此可能導致資料遺失。您應儲存資料,以免資料遺失。
您至少應儲存使用者設定,以便使用者重新安裝應用程式時,仍可重複使用其資訊。使用 Storage API (storage.sync) 時,使用者資料可自動與 Chrome 同步功能同步。
在應用程式關閉前進行清理
應用程式執行階段會在卸載事件頁面之前,將 onSuspend()
事件傳送至該頁面。事件頁面可以監聽此事件,並在應用程式關閉前執行清除工作和儲存狀態。
觸發此事件後,應用程式執行階段就會開始關閉應用程式。如果應用程式有開啟的視窗,日後可能會透過 onRestarted
事件重新啟動。在這種情況下,應用程式應將目前的狀態儲存至永久性儲存空間,這樣一來,如果收到 onRestarted
事件,應用程式就能以相同狀態重新啟動。應用程式只有幾秒鐘的時間來儲存狀態,之後就會終止,因此建議您在應用程式正常執行時,逐漸儲存應用程式狀態。
收到 onSuspend
後,除非因某些原因而中斷暫停狀態,否則系統不會再將事件傳送至應用程式。在這種情況下,onSuspendCanceled
會傳送至應用程式,且應用程式不會卸載。
chrome.runtime.onSuspend.addListener(function() {
// Do some simple clean-up tasks.
});