Document: hasStorageAccess() 方法

基线 2023

新功能

2023 年 12 月起,此功能适用于最新的设备和浏览器版本。此功能可能不适用于旧设备或浏览器。

hasStorageAccess() 方法是 Document 接口的一部分,它返回一个 Promise,该 Promise 解析为一个布尔值,指示文档是否可以访问 第三方未分区 的 cookie。

此方法是 存储访问 API 的一部分。

注意:此方法是 Document.hasUnpartitionedCookieAccess() 的另一个名称。目前没有计划删除此方法而改用 Document.hasUnpartitionedCookieAccess().

语法

js
hasStorageAccess()

参数

无。

返回值

一个 Promise,它解析为一个布尔值,指示文档是否可以访问第三方 cookie——如果可以访问,则为 true,否则为 false

此方法返回的结果在以下几种情况下可能不准确。

  1. 用户可能启用了阻止第三方 cookie 的浏览器设置;在这种情况下,即使第三方 cookie 仍然无法访问,也可能会返回 true。为了处理这种情况,您应该优雅地处理任何导致无法检索 cookie 值的错误;例如,通知用户其个性化设置的访问被阻止,并邀请他们再次登录以使用这些设置。
  2. 浏览器可能默认情况下不会阻止第三方 cookie 访问;在这种情况下,即使第三方 cookie 可以访问,并且不需要请求存储访问权限(例如,通过 Document.requestStorageAccess()),也可能会返回 false。为了解决此问题,您可以查询 Document.cookie 以确定您的 cookie 是否可以访问,如果不可访问,则调用 Document.requestStorageAccess()

注意:如果 Promise 已解析,并且在最初调用该函数时正在处理用户手势事件,则解析处理程序将像正在处理用户手势一样运行,因此它将能够调用需要用户激活的 API。

异常

InvalidStateError DOMException

如果当前 Document 尚未激活,则会抛出此异常。

示例

js
document.hasStorageAccess().then((hasAccess) => {
  if (hasAccess) {
    // storage access has been granted already.
    console.log("cookie access granted");
  } else {
    // storage access hasn't been granted already;
    // you may want to call requestStorageAccess().
    console.log("cookie access denied");
  }
});

注意:有关更完整的示例,请参阅 使用存储访问 API

规范

规范
存储访问 API
# dom-document-hasstorageaccess

浏览器兼容性

BCD 表只在启用 JavaScript 的浏览器中加载。

另请参见