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。