正在準備移除 AppCache

根據預設,Chrome 第 85 版會停止支援 AppCache。大多數開發人員應立即遷移 AppCache,且不再等待。

接續先前的公告說明,Chrome 和其他以 Chromium 為基礎的瀏覽器將不再支援 AppCache。我們建議開發人員立即停用 AppCache,無須等待更長的時間。

Service Worker 則能代替 AppCache 提供的離線體驗,目前已廣泛支援。請參閱遷移策略

時間軸

近期異動是指某些步驟的時程可能異動。我們會試著讓這個時程保持在最新狀態,但在這個階段,請盡快遷出 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 和權杖之間新增一行)。

下方內嵌的範例專案示範如何在 index.htmlmanifest.appcache 檔案中新增正確的來源試用權杖。

為什麼需要在多個位置使用符記?

相同的來源試用權杖必須與以下項目建立關聯:

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

如果您曾經參與來源試用,那麼可能只將權杖加入 HTML 網頁。AppCache 的「反向」來源試用十分特殊,您也需要將權杖與每個 AppCache 資訊清單建立關聯。

將來源試用權杖新增至 HTML 網頁,即可從網頁應用程式啟用 window.applicationCache 介面。未與權杖建立關聯的網頁將無法使用 window.applicationCache 方法和事件。沒有權杖的網頁也無法從 AppCache 載入資源。從 Chrome 第 85 版開始,行為將視為 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 介面。具體來說,此程式庫無法取代 window.applicationCache 介面或相關的 AppCache 事件。

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

Service Worker 和 AppCache 互斥

擬定遷移策略時,請注意,對於由 Service Worker 的控制載入的任何網頁,Chrome 都會停用 AppCache 功能。換句話說,當您部署控制特定網頁的 Service Worker 後,您將無法在該頁面上使用 AppCache。

因此,建議您不要嘗試個別遷移到 Service Worker。如果您部署的 Service Worker,只包含部分快取邏輯,可能會發生錯誤。您無法改回使用 AppCache 來「填補缺口。」

同樣地,如果您在 AppCache 移除前部署 Service Worker,然後發現需要復原至先前的 AppCache 實作,則必須確實取消註冊該 Service Worker。只要指定網頁的範圍內有已註冊的 Service Worker,系統就不會使用 AppCache。

跨平台故事

如要進一步瞭解特定瀏覽器廠商的 AppCache 移除要求,建議您洽詢該特定瀏覽器廠商。

所有平台上的 Firefox

Firefox 已於 2015 年 9 月淘汰 AppCache,並從 2019 年 9 月在 Beta 版和夜間版本中移除對 AppCache 的支援。

iOS 和 macOS 上的 Safari

Safari 已於 2018 年初淘汰 AppCache。

搭配 Chrome 的 iOS

Chrome for iOS 與 Chrome 在其他平台使用的瀏覽器引擎不同 (WKWebView),因此是特殊情況。使用 WKWebView 的 iOS 應用程式目前不支援 Service Worker,且 Chrome 的 AppCache 移除公告未涵蓋適用於 iOS 版 Google Chrome 的 AppCache。如果您知道自己的網頁應用程式有大量適用於 iOS 的 Chrome 使用者,請務必記住這一點。

Android WebView

有些 Android 應用程式的開發人員會使用 Chrome WebView 顯示網頁內容,也可能使用 AppCache。不過,您無法啟用 WebView 的來源試用。因此,Chrome WebView 將在沒有來源試用的情況下支援 AppCache,直到最終移除為止 (預計在 Chrome 90 中推出)。

瞭解詳情

以下是從 AppCache 遷移至 Service Worker 的開發人員適用的資源。

文章

工具

取得協助

如果您使用特定工具遇到問題,請在其 GitHub 存放區中開啟問題。

如要提出有關在 Stack Overflow 上遷移 AppCache 的一般問題,請使用 html5-appcache 標記。

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

主頁橫幅是以 Smithsonian Institution Archives, Acc. 11-007、Box 020、Image No. MNH-4477