離線優先

由於網際網路連線可能很容易或不存在,因此您必須考慮離線:以沒有網際網路連線的方式編寫應用程式。應用程式可離線運作後,請新增您需要的網路功能,讓應用程式連上網路時執行更多工作。請參閱下文,瞭解如何實作支援離線功能的應用程式。

總覽

Chrome 應用程式可免費取得下列功能:

  • 您的應用程式檔案 (所有 JavaScript、CSS 和字型,以及圖片等需要的其他資源) 已下載
  • 您的應用程式可以使用 Chrome Storage API 儲存及同步處理少量資料
  • 應用程式會監聽線上和離線事件偵測網路連線是否發生變化

但這些功能並不足以保證應用程式可離線運作。您啟用離線功能的應用程式應遵循下列規則:

盡可能使用本機資料。
使用網際網路上的資源時,請使用 XMLHttpRequest 取得資源,然後將資料儲存在本機。你可以使用 Chrome Storage API、IndexedDB 或 Filesystem API 將資料儲存在本機。
將應用程式 UI 與資料區隔開來。
區分 UI 和資料不僅能改善應用程式的設計,還能簡化啟用離線使用功能的工作,還能提供使用者資料的其他檢視畫面。MVC 架構可協助您區隔 UI 和資料。
假設應用程式可以隨時關閉。
將應用程式狀態儲存在本機和遠端中 (如果可能的話),以便使用者能接續先前的進度。
完整測試應用程式。
確保應用程式在常見和不容易的情境下都能順利運作。

安全性限制

Chrome 應用程式只能於下列位置放置資源:

  • 由於本機資料會顯示在使用者的機器上,且無法安全加密,因此機密資料必須保留在伺服器上。舉例來說,請勿將密碼或信用卡號碼儲存在本機。
  • 應用程式執行的所有 JavaScript 都必須位於應用程式的套件中。但不得內嵌。
  • 所有 CSS 樣式圖片字型都可以一開始位於應用程式套件或遠端網址。如果是遠端資源,則無法在 HTML 中指定。請改為使用 XMLHttpRequest 取得資料 (請參閱「參照外部資源」)。然後使用 blob 網址參照資料,或 (最好) 儲存資料,然後使用 Filesystem API 載入資料。

不過,你可以載入來自外部網站的影片和音效等大型媒體資源。遵循此規則的其中一個原因是,當應用程式連線受限或沒有連線時,<video><audio> 元素可以有良好的備用行為。另一個原因是,使用 XMLHttpRequest 和 blob 網址擷取及提供媒體時,目前不允許串流或部分緩衝處理。

如要提供沙箱 iframe,您可以建立 <webview> 代碼。其內容可以是遠端,但無法直接存取 Chrome 應用程式 API (請參閱「嵌入外部網頁」)。

Chrome 應用程式的部分限制是由內容安全政策 (CSP) 強制執行,這項政策一律符合以下規定,而且您無法針對 Chrome 應用程式變更:

default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' blob: data: filesystem: 'unsafe-inline';
img-src 'self' blob: data: filesystem:;
frame-src 'self' blob: data: filesystem:;
font-src 'self' blob: data: filesystem:;
media-src * data: blob: filesystem:;

指定 sales_enabled

我們假設應用程式離線運作良好。如果沒有,請通知這項行為,讓使用者離線時,啟動圖示會變暗。方法是在應用程式資訊清單檔案中,將 offline_enabled 設為 false

{
  "name": "My app",
  ...
  "offline_enabled": false,
  ...
}

將資料儲存在本機

下表列出將資料儲存在本機的選項 (另請參閱管理資料)。

API最佳用途附註
Chrome Storage API少量字串資料非常適合用於設定和狀態。可從遠端進行同步處理,但其實完全不必手動同步。不適用於資料量較大,也因為設有配額規定。
IndexedDB API結構化資料針對資料提供快速搜尋。使用 unlimitedStorage 權限
檔案系統 API其他提供沙箱區,供您儲存檔案。使用 unlimitedStorage 權限

從遠端儲存資料

一般來說,您可以自行決定如何遠端儲存資料,但部分架構和 API 會有所幫助 (請參閱 MVC 架構)。如果使用 Chrome Storage API,那麼每當應用程式連上網路且使用者登入 Chrome 時,所有可同步的資料都會自動同步處理。如果使用者未登入,系統會提示他們登入。不過請注意,如果使用者解除安裝應用程式,系統會刪除使用者的已同步處理資料。{QUESTION: true?}

建議您在解除安裝應用程式後,將使用者資料保留至少 30 天,讓使用者在重新安裝應用程式時能享有良好體驗。

區隔使用者介面與資料

使用 MVC 架構可協助您設計及實作應用程式,以便將資料與應用程式的資料檢視畫面完全分開。如需 MVC 架構清單,請參閱 MVC 架構

如果您的應用程式會與自訂伺服器通訊,伺服器會提供資料,而不是一串 HTML 程式碼。並思考符合 REST 樣式的 API。

將資料與應用程式區隔開來之後,提供另一種資料檢視畫面會比較容易。舉例來說,您可以提供網站視圖來檢視任何公開資料,網站檢視畫面不僅能在使用者離開 Chrome 時派上用場,還能讓搜尋引擎找到資料。

測試

請確保您的應用程式在下列情況下能正常運作:

  • 應用程式安裝完成,然後立即離線。換句話說,應用程式第一次使用是離線使用。
  • 應用程式先安裝在一部電腦上,然後再同步到另一台電腦。
  • 系統會在解除安裝應用程式後立即重新安裝。
  • 應用程式同時在兩台電腦上執行,且使用相同的設定檔。在一部電腦離線時,應用程式必須在正常情況下運作,使用者在該電腦上執行許多作業,電腦才能恢復連線。
  • 應用程式的連線不穩定,經常切換使用線上和離線模式。

此外,請確認應用程式不會將使用者的機密資料 (例如密碼) 儲存在使用者的電腦上。