文档:hasStorageAccess() 方法

Baseline 2023
新推出

自 ⁨2023 年 12 月⁩起,此功能可在最新的设备和浏览器版本上使用。此功能可能无法在较旧的设备或浏览器上使用。

hasStorageAccess() 方法属于 Document 接口,它返回一个 Promise,该 Promise 解析为一个布尔值,指示文档是否具有访问 第三方未分区 Cookie 的权限。

此方法是 Storage Access API 的一部分。

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

语法

js
hasStorageAccess()

参数

无。

返回值

一个 Promise,它解析为一个布尔值,指示文档是否具有访问第三方 Cookie 的权限——如果具有,则为 true,否则为 false

此方法返回的结果在某些情况下可能不准确。

  1. 用户可能设置了阻止第三方 Cookie 的浏览器设置;在这种情况下,即使第三方 Cookie 仍然无法访问,也可能返回 true。要处理这种情况,您应该优雅地处理任何导致 Cookie 值无法检索的错误;例如,告知用户对他们个性化设置的访问已被阻止,并邀请他们再次登录以使用这些设置。
  2. 浏览器可能默认不阻止第三方 Cookie 访问;在这种情况下,即使第三方 Cookie 可访问,也可能返回 false,并且不需要请求存储访问(即通过 Document.requestStorageAccess())。要解决此问题,您可以查询 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");
  }
});

注意:有关更完整的示例,请参阅使用 Storage Access API

规范

规范
Storage Access API
# dom-document-hasstorageaccess

浏览器兼容性

另见