儲存空間與 Cookie

擴充功能可像一般網站一樣儲存 Cookie 及存取網路儲存空間 API。但在某些情況下,這些行為在擴充功能中的運作方式有所不同。

如要進一步瞭解擴充功能 API,請參閱 chrome.storage

儲存空間

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

保留

使用者清除瀏覽資料時,系統不會清除擴充功能儲存空間。 這適用於使用 Web Storage API (例如本機儲存空間IndexedDB) 儲存的任何資料。

根據預設,擴充功能須遵守一般的儲存空間配額限制,呼叫 navigator.storage.estimate() 即可檢查擴充功能。記憶體壓力較高時,也可以撤銷儲存空間,但這種情況相當罕見。如何避免這種情況發生:

  • 要求 "unlimitedStorage" 權限 (會影響擴充功能和網頁儲存空間 API,且擴充功能不受配額限制和遭到撤銷影響)。
  • 呼叫 navigator.storage.persist() 避免遭到剔除。

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

Service Worker 中的存取權

您可以在服務工作站中存取 IndexedDBCache Storage API。但「本機儲存空間」和「工作階段儲存空間」則不是。

如果您需要從 Service Worker 存取本機儲存空間或工作階段儲存空間,請使用畫面外文件

分區

分區是為儲存的資料引入鍵,以限制存取位置。儲存空間向來是依據來源建立索引鍵。

從 Chrome 115 版開始,儲存空間分區定義了分區索引鍵的定義方式,以防止某些類型的跨網站追蹤。從實務上來說,這表示如果網站 A 嵌入了包含網站 B 的 iframe,網站 B 將無法存取通常直接瀏覽網站時所需的儲存空間。

如要減輕擴充功能的影響,可套用兩種豁免設定:

  • 如果使用 chrome-extension:// 配置的網頁嵌入任何協作平台,系統就不會套用儲存空間分區,且擴充功能將可存取頂層分區。
  • 如果使用 chrome-extension:// 配置的網頁包含 iframe,而擴充功能擁有其嵌入網站的主機權限,則該網站也可以存取其頂層分區。

餅乾

Cookie 是用於儲存與特定網域和路徑相關的鍵/值組合。雖然擴充功能的效益有限,但如果您遇到特定用途,或是納入了在導入作業中使用第三方指令碼的第三方指令碼,瞭解這些擴充功能的行為會很有幫助。

安全的 Cookie

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

此外,這也表示擴充功能網頁無法使用必須提供 Secure 屬性的其他 Cookie 屬性:

分區和 SameSite 行為

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

如果是與第三方網站相關聯的 Cookie (例如在擴充功能頁面的頁框中載入的第三方網站,或從擴充功能頁面向第三方來源發出的要求),則 Cookie 的運作方式與網頁相同,但有以下兩種情況:

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

請注意,第三方 Cookie 的相關設定會受到 Privacy Sandbox 的運作方式影響,並根據時間表進行調整

chrome.cookies API 可讓您控管要與每個 API 方法搭配使用的分區金鑰。詳情請參閱 API 參考資料