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,来识别您访问的网站。例如

  1. 您访问 a-shopping-site.com,该网站使用 ad-tracker.com 在 Web 上投放广告。ad-tracker.com 设置与 ad-tracker.com 域名关联的 Cookie。当您在 a-shopping-site.com 上时,ad-tracker.com 会接收有关您浏览的产品的信息。
  2. 您现在访问 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。

类型

cookies.Cookie

表示有关 HTTP Cookie 的信息。

cookies.CookieStore

表示浏览器中的 Cookie 存储。

cookies.OnChangedCause

表示 Cookie 更改的原因。

cookies.SameSiteStatus

表示 Cookie 的 SameSite 状态。

方法

cookies.get()

检索单个 Cookie 的信息。

cookies.getAll()

检索与给定一组筛选器匹配的所有 Cookie。

cookies.set()

使用给定的 Cookie 数据设置 Cookie;如果存在等效的 Cookie,则可能会覆盖它们。

cookies.remove()

按名称删除 Cookie。

cookies.getAllCookieStores()

列出所有现有的 Cookie 存储。

事件处理程序

cookies.onChanged

设置或删除 Cookie 时触发。

浏览器兼容性

BCD 表格仅在启用了

扩展示例

注意:此 API 基于 Chromium 的 chrome.cookies API。此文档源自 Chromium 代码中的 cookies.json