我目前正在尝试实现调用存储访问 API,但是在将 requestStorageAccess 调用嵌套在 hasStorageAccess 中时遇到问题。
这是代码的大纲 - 这是相当标准的:
requestStorageAccessAndServe() {
let thisObject = this;
var promise = document.hasStorageAccess();
promise.then(
function (hasCookieAccess) {
if (!hasCookieAccess) {
document.requestStorageAccess().then(
function successful() {
// reload iframe to run with cookie access
window.location.reload();
},
function fail() {
thisObject.serveContent(); // Code goes into here
});
} else {
thisObject.serveContent();
}
},
function (reason) {
thisObject.serveContent();
}
);
}
单击按钮触发此方法时,我总是陷入“失败”功能,没有出现请求存储访问的提示。
令人惊讶的是,这个非嵌套代码完美地工作:
requestStorageAccessAndServe() {
let thisObject = this;
let hasCookieAccess = !!document.cookie;
if (!hasCookieAccess) {
document.requestStorageAccess().then(
function successful() {
window.location.reload();
},
function fail() {
thisObject.serveContent();
});
} else {
thisObject.serveContent();
}
}
此代码有效 - 它在第一个请求时重新加载 iframe,然后在重新加载另一个请求后提供数据,但是通过执行 !!document.cookie 检查 cookie 访问非常麻烦(如果一开始没有 cookie 数据怎么办? ),我更想了解这里出了什么问题。有人有什么主意吗?
对于一个可能的解决方案,有什么方法可以强制解析 document.hasStorageAccess() 所以我不需要嵌套它?
编辑:
强迫承诺解决也无济于事。见代码示例:
async requestStorageAccessAndServe() {
let thisObject = this;
let hasCookieAccess = await document.hasStorageAccess();
if (!hasCookieAccess) {
document.requestStorageAccess().then(
function successful() {
window.location.reload();
},
function fail() {
thisObject.serveContent();
});
} else {
thisObject.serveContent();
}
}
仍然进入那个“失败”功能......