擴充功能可像一般網站一樣儲存 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 中的存取權
您可以在服務工作站中存取 IndexedDB 和 Cache 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 參考資料。