RequestStorageAccess - 如果拒绝访问则启动弹出窗口 Window

RequestStorageAccess - Launch Popup Window If Denied Access

我正在实施 Apple 的 requestStorageAccess API 以请求跨域 iFrame 中的 cookie 访问。

我们遇到的一个问题是,如果不是用户交互的直接部分,Safari 会阻止弹出窗口,这使得整个体验非常不愉快,因为用户需要单击“单击此以查看...”按钮两次 以便在第一方上下文中查看站点。

流程(如下图所示)大致是:

有更好的方法吗?当 requestStorageAccess 未解析为 true 时,标准的“失败”模式是什么?

示例代码中似乎有一些错误:

  1. requestStorageAccess()Document接口的一个方法:document.requestStorageAccess().
  2. then() 方法调用缺少右括号。
  3. url inside window.open() 必须用引号引起来:window.open("appointments.html").

这是您的代码,已更正所有错误:

document.requestStorageAccess().then(_=>
{
  // load appointments
}).catch(_=> {
  // launch popup
  window.open("appointments.html");
  // safari blocks this popup since it's part of a promise it is not directly part of a click action...
});

现在,要使此代码正常工作,您需要将弹出窗口打开代码从 catch() 移动到 then() 的错误回调中:

document.requestStorageAccess().then(_=> 
{
    // load appointments
}, _ => {
    // launch popup
    window.open("appointments.html");
});

现在,此代码之所以有效,是因为 requestStorageAccess() promise 实际上正在处理直接用户手势(按钮单击)并将其传递到 then() 回调中。但显然不是 catch().

What is the standard "failure" pattern when requestStorageAccess does not resolve to true?

我可以推荐阅读官方 Introducing Storage Access API 博客 post。