正在準備移除 AppCache

Chrome 85 版預設會移除 AppCache 支援功能。大多數開發人員應立即遷移,不要再等了。

先前的公告後,Chrome 和其他以 Chromium 為基礎的瀏覽器將移除 AppCache 支援。建議開發人員現在就遷移,不要再等了。

服務工作人員是目前瀏覽器廣泛支援的技術,可提供 AppCache 提供的離線體驗。請參閱遷移策略

時間軸

Chrome 發布時間表最近有異動,因此部分步驟的時間可能會有所不同。我們會盡量更新這份時間表,但目前請盡快從 AppCache 遷移,不要等待特定里程碑。

「已淘汰」的功能仍存在,但會記錄警告訊息,不建議使用。「已移除」功能已不存在於瀏覽器中。

在不安全內容中將無法再使用 Chrome 50 (2016 年 4 月)
從不安全環境中移除 Chrome 70 (2018 年 10 月)
在安全內容中淘汰 Chrome 79 (2019 年 12 月)
AppCache 範圍限制 Chrome 80 (2020 年 2 月)
「反向」來源試用期開始 Chrome 84 (2020 年 7 月)
從安全環境中移除,但選擇參與來源試用的使用者除外 Chrome 85 (2020 年 8 月)
完成來源試用後,全面從安全環境中移除 2021 年 10 月 5 日 (約為 Chrome 95)

來源試用

時間軸會列出兩項即將移除的里程碑。自 Chrome 85 版起,Chrome 預設將不再提供 AppCache。如果開發人員需要更多時間才能完成 AppCache 遷移作業,可以註冊「反向」原始碼試用,延長網頁應用程式的 AppCache 可用時間。原始來源試用活動將於 Chrome 84 版開始 (Chrome 85 版預設會移除),並於 2021 年 10 月 5 日結束 (約為 Chrome 95 版)。屆時,所有使用者 (包括已註冊原始碼試用的使用者) 都將無法使用 AppCache。

如要參加「反向」來源試用:

  1. 為來源要求權杖
  2. 在 HTML 網頁中加入權杖。有兩種方法可以達成這個目的:
    • 在每個網頁的標題中加入 origin-trial <meta> 標記。例如:<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
    • 或者,您也可以設定伺服器,傳回含有 Origin-Trial HTTP 標頭的回應。產生的回應標頭應如下所示:Origin-Trial: TOKEN_GOES_HERE
  3. 在 AppCache 資訊清單中加入相同權杖。請透過資訊清單中的新欄位執行這項操作,格式如下:
ORIGIN-TRIAL:
TOKEN_GOES_HERE

(ORIGIN-TRIAL 和權杖之間必須換行)。

為什麼多個位置都需要權杖?

同源試用權杖必須與下列項目建立關聯:

  • 使用 AppCache 的所有 HTML 網頁
  • 所有 AppCache 資訊清單 (透過 ORIGIN-TRIAL 資訊清單欄位)。

如果您先前曾參與原始碼試用,可能只在 HTML 網頁中加入權杖。AppCache「反向」原始碼試用計畫的特殊之處在於,您也必須將權杖與每個 AppCache 資訊清單建立關聯。

在 HTML 網頁中加入原始碼試用權杖,即可從網頁應用程式內啟用 window.applicationCache 介面。如果網頁未與符記建立關聯,就無法使用 window.applicationCache 方法和事件。如果網頁沒有權杖,也無法從 AppCache 載入資源。從 Chrome 85 版開始,這些 API 的行為會如同 AppCache 不存在。

在 AppCache 資訊清單中加入原始碼試用權杖,表示每個資訊清單仍有效。從 Chrome 85 開始,如果資訊清單沒有 ORIGIN-TRIAL 欄位,就會被視為格式錯誤,且系統會忽略資訊清單中的規則。

原始碼試用部署時間和物流

「反向」原始碼試用活動將於 Chrome 84 正式啟動,但您今天就能註冊參加,並將權杖加入 HTML 和 AppCache 資訊清單。隨著網頁應用程式的目標對象逐步升級至 Chrome 84,您先前新增的任何權杖都會生效。

將權杖新增至 AppCache 資訊清單後,請前往 about://appcache-internals,確認 Chrome 本機執行個體 (84 以上版本) 已將來源試用權杖與資訊清單的快取項目正確建立關聯。如果系統辨識出原始碼試用,您應該會在該頁面上看到與資訊清單相關聯的 Token Expires: Tue Apr 06 2021... 欄位:

about://appcache-internals 介面,顯示已辨識的權杖。

移除前測試

強烈建議您盡快遷移,停用 AppCache。如要測試網頁應用程式移除 AppCache 的情況,請使用 about://flags/#app-cache 旗標模擬移除作業。Chrome 84 以上版本皆支援這個旗標。

遷移策略

Service Worker廣受目前瀏覽器支援,可提供 AppCache 提供的離線體驗替代方案。

我們提供了一個 polyfill,可使用 Service Worker 複製部分 AppCache 功能,但無法複製整個 AppCache 介面。特別是,這項 API 無法取代 window.applicationCache 介面或相關的 AppCache 事件。

如果是較複雜的情況,Workbox 等程式庫可讓您輕鬆為網頁應用程式建立現代化 Service Worker。

Service Worker 和 AppCache 互斥

制定遷移策略時,請注意 Chrome 會在任何透過 Service Worker 控制載入的網頁上停用 AppCache 功能。換句話說,只要部署可控管特定網頁的 Service Worker,您就無法再在該網頁上使用 AppCache。

因此,建議您不要嘗試逐步遷移至 Service Worker。如果部署的 Service Worker 只包含部分快取邏輯,就會出錯。您無法使用 AppCache「填補空白」。

同樣地,如果您在移除 AppCache 前部署了 Service Worker,之後發現需要回溯至先前的 AppCache 實作方式,請務必取消註冊該 Service Worker。只要指定網頁範圍內有已註冊的 Service Worker,系統就不會使用 AppCache。

跨平台故事

如要進一步瞭解特定瀏覽器供應商的 AppCache 移除計畫,建議您與他們聯絡。

所有平台上的 Firefox

Firefox 在 44 版 (2015 年 9 月) 淘汰了 AppCache,並於 2019 年 9 月起,在 Beta 版和 Nightly 版中移除了相關支援。

iOS 和 macOS 上的 Safari

Safari 已在 2018 年初淘汰 AppCache。

搭配 Chrome 的 iOS

iOS 版 Chrome 是特例,因為它使用的瀏覽器引擎與其他平台上的 Chrome 不同,而是 WKWebView。使用 WKWebView 的 iOS 應用程式目前不支援 Service Worker,而 Chrome 移除 AppCache 的公告並未涵蓋 Chrome iOS 版的 AppCache 可用性。如果您的網路應用程式有大量 Chrome for iOS 使用者,請務必留意這點。

Android WebView

部分 Android 應用程式開發人員會使用 Chrome WebView 顯示網路內容,也可能會使用 AppCache。不過,您無法為 WebView 啟用原始碼試用。因此,在 Chrome 90 最終移除 AppCache 之前,Chrome WebView 將支援 AppCache,不需進行原始碼試用。

瞭解詳情

以下提供一些資源,協助開發人員從 AppCache 遷移至 Service Worker。

文章

工具

取得說明

如果使用特定工具時遇到問題,請在該工具的 GitHub 存放區中開啟問題討論。

如要詢問有關從 AppCache 遷移的一般問題,請前往 Stack Overflow 並使用 html5-appcache 標記。

如果您遇到與 Chrome 移除 AppCache 相關的錯誤,請使用 Chromium Issue Tracker 回報

主頁橫幅圖片,取自 Smithsonian Institution Archives, Acc. 11-007, Box 020, Image No. MNH-4477