我正在实现Apple的requestStorageAccess API,以请求跨域iFrame中的cookie访问。
我们遇到的一个问题是,如果不是用户交互的一部分,Safari将阻止弹出窗口,这使整个体验非常不愉快,因为用户需要单击“单击此按钮以查看...”按钮。 >两次,以便在第一方上下文中查看该网站。
有更好的方法吗?当requestStorageAccess不能解析为true时,标准的“失败”模式是什么?
答案 0 :(得分:0)
示例代码中似乎有一些错误:
requestStorageAccess()
是Document
界面:document.requestStorageAccess()
的一种方法。then()
方法调用缺少右括号。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()
。
requestStorageAccess不能解析为true时,标准的“失败”模式是什么?
我建议您阅读官方Introducing Storage Access API博客文章。