儲存空間與 Cookie

擴充功能可以儲存 Cookie,並存取網路儲存空間 API,與一般網站類似。不過,在某些情況下,這些屬性在擴充功能中的行為會有所不同。

如要瞭解擴充功能 API,請參閱 browser.storage

儲存空間

擴充功能通常會使用網頁平台儲存空間 API。本節將探討這些 API 在擴充功能環境中的行為,這有時可能與 API 在網頁上的行為不同。

保留設定

使用者清除瀏覽資料時,系統不會清除擴充功能儲存空間。 這項規定適用於使用網路儲存空間 API (例如「本機儲存空間」和「IndexedDB」IndexedDB) 儲存的任何資料。

根據預設,擴充功能會受到一般儲存空間配額限制,您可以呼叫 navigator.storage.estimate() 檢查配額。在記憶體壓力過大的情況下,儲存空間也可能遭到清除,但這種情況很少發生。如要避免這種情況,請採取下列做法:

  • 要求 "unlimitedStorage" 權限,這項權限會影響擴充功能和網路儲存空間 API,並免除擴充功能的配額限制和逐出作業。
  • 撥打 navigator.storage.persist(),避免遭到驅逐。

擴充功能來源會共用擴充功能儲存空間,包括擴充功能 Service Worker、任何擴充功能頁面 (包括彈出式視窗和側邊面板) 和螢幕外文件。在內容指令碼中,呼叫 Web Storage API 會存取內容指令碼插入的主機網頁資料,而非擴充功能。

服務工作站中的存取權

服務工作人員可存取 IndexedDBCache Storage API。但本機儲存空間工作階段儲存空間則否。

如需從 Service Worker 存取 Local Storage 或 Session Storage,請使用螢幕外文件

分區

分區是指為儲存的資料導入金鑰,限制資料的存取位置。儲存空間過去一律以來源為鍵。

從 Chrome 115 版開始,儲存空間分區會變更分區金鑰的定義方式,防止特定類型的跨網站追蹤。實際情況是,如果網站 A 嵌入含有網站 B 的 iframe,網站 B 就無法存取直接導向時通常會有的儲存空間。

為減輕這項異動對擴充功能的影響,我們提供兩項豁免:

  • 如果任何網站嵌入了採用 chrome-extension:// 配置的網頁,系統就不會套用儲存空間分區,擴充功能也能存取頂層分區。
  • 如果含有 chrome-extension:// 配置的網頁包含 iframe,且擴充功能具有內嵌網站的主機權限,該網站也能存取頂層分割區。

Cookie

Cookie 可用來儲存與特定網域和路徑相關聯的鍵/值組合。這些屬性在擴充功能中的價值有限,但如果您有特定用途,或已將使用這些屬性的第三方指令碼併入實作中,瞭解其行為可能會有幫助。

安全 Cookie

Secure Cookie 屬性僅支援 https:// 配置。因此,chrome-extension:// 網頁無法使用這項屬性設定 Cookie。

這也表示擴充功能網頁無法使用其他需要 Secure 屬性的 Cookie 屬性:

分割和 SameSite 行為

在 chrome-extension:// 頁面設定的 Cookie 一律會使用 SameSite=Lax。 因此,擴充功能在自有來源設定的 Cookie 永遠無法在框架中存取,分區也不相關。

如果是與第三方網站相關聯的 Cookie,例如在擴充功能頁面的框架中載入第三方網站,或是從擴充功能頁面向第三方來源發出的要求,Cookie 的行為與網頁相同,但有以下兩點例外:

  • 即使在子框架中,如果特定分頁的頂層網頁是 chrome-extension:// 網頁,系統一律不會封鎖第三方 Cookie。
  • 如果擴充功能具有第三方的主機權限,則擴充功能對第三方的要求會視為同網站要求。這表示可以傳送 Cookie。SameSite=Strict 請注意,這項功能僅適用於網路要求,不適用於透過 JavaScript 中的 document.cookie 存取,且不適用於第三方 Cookie 遭到封鎖的情況。

請注意,第三方 Cookie 的相關設定會受到 Privacy Sandbox 計畫影響,並根據該計畫的時程進行調整

browser.cookies API 可控管要用於各個 API 方法的分割區金鑰。詳情請參閱「API 參考資料」。