cookies
允許擴充套件程式獲取、設定和移除 cookie,並在 cookie 發生更改時收到通知。
Permissions
要使用此 API,擴充套件程式必須在其 manifest.json 檔案中指定 "cookies" API 許可權,併為想要訪問其 cookie 的任何網站指定 主機許可權。擴充套件程式可以獲取、設定或移除任何可以透過匹配主機許可權的 URL 讀取、寫入或刪除的 cookie。例如:
http://*.example.com/-
擁有此主機許可權的擴充套件程式可以:
- 讀取
www.example.com的非安全 cookie,路徑不限。 - 寫入
www.example.com的安全或非安全 cookie,路徑不限。
它不能:
- 讀取
www.example.com的安全 cookie。
- 讀取
http://www.example.com/-
擁有此主機許可權的擴充套件程式可以:
- 讀取
www.example.com的非安全 cookie,路徑不限。 - 讀取
.example.com的非安全 cookie,路徑不限。 - 寫入
www.example.com的安全或非安全 cookie,路徑不限。 - 寫入
.example.com的安全或非安全 cookie,路徑不限。
它不能:
- 讀取或寫入
foo.example.com的 cookie。 - 讀取或寫入
foo.www.example.com的 cookie。
- 讀取
*://*.example.com/-
擁有此主機許可權的擴充套件程式可以:
- 讀取或寫入
www.example.com的安全或非安全 cookie,路徑不限。
- 讀取或寫入
跟蹤保護
跟蹤器使用第三方 cookie,即由非您當前訪問的網站設定的 cookie,來識別您訪問過的網站。例如:
- 您訪問
a-shopping-site.com,該網站使用ad-tracker.com在網上投放廣告。ad-tracker.com會設定一個與ad-tracker.com域名關聯的 cookie。當您在a-shopping-site.com上時,ad-tracker.com會收到您瀏覽過的產品資訊。 - 現在您訪問
a-news-site.com,該網站使用ad-tracker.com投放廣告。ad-tracker.com讀取其 cookie,並利用從a-shopping-site.com收集的資訊來決定向您展示哪些廣告。
Firefox 包含兩項防止跟蹤的功能:動態分割槽和第一方隔離。這些功能會分隔 cookie,使跟蹤器無法將訪問的網站聯絡起來。因此,在前面的示例中,ad-tracker.com 無法看到在訪問 a-shopping-site.com 時在 a-news-site.com 上建立的 cookie。
從 Firefox 103 開始,動態分割槽是預設使用的功能。但是,如果使用者或擴充套件程式啟用了第一方隔離,它將優先於動態分割槽。
注意:當隱私瀏覽使用動態分割槽時,普通瀏覽可能不會對 cookie 進行分割槽。有關詳細資訊,請參閱 Firefox 中分割槽狀態。
儲存分割槽
在使用動態分割槽時,Firefox 會根據頂級網站對 JavaScript API 可訪問的儲存進行分割槽,同時提供對未分割槽儲存的適當訪問以支援常見用例。此功能正在逐步推出。有關實現詳細資訊,請參閱 Firefox 中分割槽狀態。
儲存分割槽由頂級網站的模式化 URL 鍵入,並且當動態分割槽處於活動狀態時,該鍵值可透過 cookie API 中的 partitionKey.topLevelSite 屬性訪問,例如 partitionKey: {topLevelSite: "http://site"}。
通常,頂級文件儲存在未分割槽的儲存中,而第三方 iframe 儲存在分割槽的儲存中。如果無法確定分割槽鍵,則使用預設值(未分割槽儲存)。例如,雖然所有 HTTP(S) 網站都可以用作分割槽鍵,但 moz-extension:- URL 不能。因此,Firefox 擴充套件文件中的 iframe 不使用分割槽儲存。
預設情況下,cookies.get()、cookies.getAll()、cookies.set() 和 cookies.remove() 會處理未分割槽儲存中的 cookie。要在這些 API 中處理分割槽儲存中的 cookie,必須設定 partitionKey 中的 topLevelSite。唯一的例外是 getAll,其中設定 partitionKey 而不設定 topLevelSite 會返回分割槽和未分割槽儲存中的 cookie。cookies.onChanged 會針對擴充套件程式可以訪問的任何 cookie(包括分割槽儲存中的 cookie)觸發。為確保正確修改 cookie,擴充套件程式應讀取事件中的 cookie.partitionKey 屬性,並將其值傳遞給 cookies.set() 和 cookies.remove()。
第一方隔離
啟用第一方隔離後,cookie 將根據使用者訪問的原始頁面的域進行限定(基本上是使用者在 URL 欄中看到的域,也稱為“第一方域”)。
使用者可以透過調整瀏覽器配置來啟用第一方隔離,擴充套件程式也可以透過 privacy API 中的 firstPartyIsolate 設定來啟用它。請注意,第一方隔離在 Tor Browser 中是預設啟用的。
cookies API 使用 firstPartyDomain 屬性來表示第一方域。在啟用第一方隔離時設定的所有 cookie 都有此屬性設定為原始頁面的域。在前面的示例中,一個 cookie 是 a-shopping-site.com,另一個是 a-news-site.com。當第一方隔離關閉時,網站設定的所有 cookie 的此屬性都將設定為一個空字串。
cookies.get()、cookies.getAll()、cookies.set() 和 cookies.remove() API 都接受 firstPartyDomain 選項。
當第一方隔離開啟時,您必須提供此選項,否則 API 呼叫將失敗並返回一個被拒絕的 Promise。對於 get()、set() 和 remove(),您必須傳遞一個字串值。對於 getAll(),您也可以在此處傳遞 null,這將獲取所有 cookie,無論它們是否具有非空 firstPartyDomain 值。
當第一方隔離關閉時,firstPartyDomain 引數是可選的,預設為空字串。可以使用非空字串來檢索或修改第一方隔離 cookie。同樣,將 null 作為 firstPartyDomain 傳遞給 getAll() 會返回所有 cookie。
型別
-
表示有關 HTTP cookie 的資訊。
-
表示瀏覽器中的 cookie 儲存。
-
表示 cookie 更改的原因。
-
表示 cookie 的同站狀態。
方法
-
檢索單個 cookie 的資訊。
-
檢索與給定過濾器集匹配的所有 cookie。
-
使用給定的 cookie 資料設定 cookie;如果存在等效的 cookie,可能會覆蓋它們。
-
透過名稱刪除 cookie。
-
列出所有現有的 cookie 儲存。
事件處理器
-
在設定或移除 cookie 時觸發。
擴充套件程式示例
瀏覽器相容性
載入中…
注意:此 API 基於 Chromium 的 chrome.cookies API。本文件源自 Chromium 程式碼中的 cookies.json。