Chrome 115 通过第三方上下文中的分区,对存储空间、Service Worker 和通信 API 做出了更改。除了被同源政策隔离之外,在第三方上下文中使用的受影响 API 也会被顶级上下文的网站隔离出来。
尚未来得及支持第三方存储分区的网站可以参与弃用试用,以暂时取消分区(继续按同源政策进行隔离,但取消顶级网站的隔离),并恢复其网站上嵌入的内容中的存储、Service Worker 和通信 API 之前的行为。在 2024 年 9 月 3 日发布 Chrome 127 后,此弃用试用将结束。请注意,这与针对第三方 Cookie 访问的弃用试用是分开的,只针对存储空间的访问。
作为一项长期解决方案,旨在应对因第三方非 Cookie 存储分区中断而中断的特定用例。Chrome 建议第三方通过 Storage Access API(自 Chrome 117 起开始提供发货功能)请求存储/通信访问权限(包括 Cookie 和非 Cookie 访问权限),该 API 已允许第三方请求 Cookie 访问权限。
从 Chrome 120 开始,此提案将可供通过源试用进行实验。开发者应参与此源试用,以评估所提议的解决方案如何应对其用例,以确保在弃用试用结束之前做好准备。
源试用详情
从 Chrome 120 开始,Chrome 将支持源试用 StorageAccessAPIBeyondCookies,以支持针对 Storage Access API 提议的扩展程序(向后兼容),以允许在第三方环境中访问未分区存储空间(Cookie 和非 Cookie)。
力学
该 API 可按如下方式使用(在嵌入式 iframe 中运行的 JavaScript):
// Request a new storage handle via rSA (this should prompt the user)
const handle = await document.requestStorageAccess({all: true});
// Write some 1P context sessionStorage
handle.sessionStorage.setItem('userid', '1234');
// Write some 1P context localStorage
handle.localStorage.setItem('preference', 'A');
// Open or create an indexedDB that is shared with the 1P context
const messageDB = handle.indexedDB.open('messages');
// Use locks shared with the 1P context
await handle.locks.request('example', ...);
如果您只需要特定的 API 访问权限,而不是对 all
的访问权限,则可以只传递所需的 API 句柄的名称。例如,您可以传递 {sessionStorage: true}
以仅获取对会话存储空间的访问权限,或者传递 {indexedDB: true, locks:true}
以访问 IndexedDB 和 Web Lock。
除了调用以下额外的扩展之外,对非 Cookie 存储的访问也符合通过 Storage Access API 访问 Cookie 的当前要求。例如,在 Chrome 中,当源位于同一个 Related Website Set(First Party Set 的新名称:RWS)中时,系统就不会显示任何提示。不属于同一 RWS 的来源将需要遵守 Chrome 中 Storage Access API 的提示要求。
时长
源试用从 Chrome 120 开始,一直持续到 Chrome 125(或任何里程碑阶段的 2024 年 8 月 6 日之后)。
范围
Chrome 120 仅支持 DOM Storage(会话和本地存储)、Indexed DB 和 Web Locks。
Chrome 121 中添加了缓存存储、源私有文件系统、配额、Blob 存储和广播通道。
Chrome 123 中添加了共享工作器以及对添加 Cookie 的控制。
从 Chrome 120 开始,如果在创建工作器之前调用 requestStorageAccess
,则专用工作器会继承对未分区 Cookie 的访问权限(这不需要使用 Storage Access API 句柄)。
参与
- 评估您在第三方环境中如何使用 Cookie 和非 Cookie 存储。这些示例用例可能有助于您了解此提案是否满足您的需求。
- 启动 Chrome 120 版(或更高版本),并确保已启用 test-third-party-cookie-phaseout 标志。
- 如果您想在本地测试该功能而不先设置源试用令牌,可以在浏览器中启用 #enable-experimental-web-platform-features。
- 完成本地测试后,您可以注册 StorageAccessAPIBeyondCookies 源试用,并为您的网域获取令牌。如需了解详细说明,请访问开始试用。Chrome 源试用问题排查指南提供了完整的核对清单,以确保正确配置令牌。
- 通过 HTTP 标头、HTML 元标记或以编程方式将源试用令牌嵌入到您需要使用 Storage Access API 句柄的 iframe 中。请注意,令牌必须嵌入到任何希望使用此 API 的帧中,如果将其嵌入到父帧中,并不会在子帧中启用此 API。
- 调用
document.requestStorageAccess(...)
以获取跨网站 iframe 中的 Storage Access API 句柄。如需了解成功完成此调用的要求,请参阅 Storage Access API 文档。 - 迁移 iframe 中相关的存储空间,以便使用 Storage Access API 句柄(如果有)。例如,对
window.sessionStorage.setItem(...)
的调用会变为handle.sessionStorage.setItem(...)
。 - 打开您的网站,验证存储空间访问标识名是否按预期运行。
- 如需停止参与源试用,请移除您在第 3 步中添加的令牌。
- 欢迎向 Storage Access API 非 Cookie Storage GitHub 代码库提交反馈或提出您遇到的任何问题。
演示:使用 Storage Access API 访问未分区的本地存储空间
以下演示介绍了如何使用 Storage Access API 从第三方 iframe 访问未分区的广播频道:
https://saa-beyond-cookies.glitch.me/
此演示版要求使用 Chrome 121 或更高版本,并启用 test-third-party-cookie-phaseout 标志。