Chrome 應用程式生命週期

應用程式執行階段和事件頁面負責管理應用程式的生命週期。應用程式執行階段會管理應用程式安裝、控制事件頁面,並可隨時關閉應用程式。事件頁面會監聽應用程式執行階段中的事件,並管理啟動項目和啟動方式。

生命週期的運作方式

應用程式執行階段會從使用者的電腦載入事件頁面,並觸發 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.
});