Cookie
允许扩展获取和设置 Cookie,并在 Cookie 更改时收到通知。
权限
要使用此 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
在 Web 上投放广告。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。此保护的第一个迭代是第一方隔离,现在正被 动态分区 取代。
注意:第一方隔离和动态分区不会同时处于活动状态。如果用户或扩展程序开启第一方隔离,则优先于动态分区。但是,当私密浏览使用动态分区时,普通浏览可能不会对 Cookie 进行分区。有关详细信息,请参阅 Firefox 中的分区状态。
存储分区
使用 动态分区 时,Firefox 会根据顶级网站的带方案 URL 对 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 地址栏中显示给用户的域名,也称为“第一方域名”)。
用户可以通过调整浏览器的配置来启用第一方隔离,并使用 firstPartyIsolate
设置(位于 privacy
API 中)由扩展程序设置。请注意,Tor Browser 默认启用第一方隔离。
在 cookies
API 中,第一方域名使用 firstPartyDomain
属性表示。在第一方隔离开启时设置的所有 Cookie 都会将此属性设置为原始页面的域名。在前面的示例中,对于一个 Cookie,它是 a-shopping-site.com
,对于另一个 Cookie,它是 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 的 SameSite 状态。
方法
-
检索单个 Cookie 的信息。
-
检索与给定一组筛选器匹配的所有 Cookie。
-
使用给定的 Cookie 数据设置 Cookie;如果存在等效的 Cookie,则可能会覆盖它们。
-
按名称删除 Cookie。
-
列出所有现有的 Cookie 存储。
事件处理程序
-
设置或删除 Cookie 时触发。
浏览器兼容性
BCD 表格仅在启用了
扩展示例
注意:此 API 基于 Chromium 的 chrome.cookies
API。此文档源自 Chromium 代码中的 cookies.json
。