應用程式執行階段和事件頁面負責管理應用程式的生命週期。應用程式執行階段會管理應用程式安裝、控制事件頁面,並可隨時關閉應用程式。事件頁面會監聽應用程式執行階段中的事件,並管理啟動項目和啟動方式。
生命週期的運作方式
應用程式執行階段會從使用者的電腦載入事件頁面,並觸發 onLaunch()
事件。這個事件會告知事件頁面要啟動哪些視窗,以及這些視窗的大小。
當事件頁面沒有執行 JavaScript、沒有待處理的回呼且沒有開啟的視窗時,執行階段會卸載事件頁面並關閉應用程式。在卸載事件頁面之前,會觸發 onSuspend()
事件。讓事件頁面有機會在應用程式關閉前執行簡單的清理工作。
建立活動頁面和視窗
所有應用程式都必須提供活動網頁。本頁包含應用程式的頂層邏輯,不含專屬 UI,負責為所有其他應用程式頁面建立視窗。
建立活動頁面
如要建立事件頁面,請在應用程式資訊清單中加入「背景」欄位,並在指令碼陣列中加入 background.js
。事件頁面使用的所有程式庫指令碼都必須先新增至「Background」欄位:
"background": {
"scripts": [
"foo.js",
"background.js"
]
}
事件網頁必須包含 onLaunched()
函式。應用程式以任何方式啟動時,系統就會呼叫此函式:
chrome.app.runtime.onLaunched.addListener(function() {
// Tell your app what to launch and how.
});
建立視窗
活動網頁可自行決定是否建立一或多個視窗。根據預設,這些視窗是透過連至事件網頁的指令碼連線來建立,而可直接由事件頁面編寫指令碼。
Chrome 應用程式中的 Windows 不會與任何 Chrome 瀏覽器視窗建立關聯。這些容器具有選用影格,內含標題列和大小控制項,以及建議的視窗 ID。如果沒有 ID 的 Windows,重新啟動後就不會還原至其大小和位置。
以下是從 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.
});