В настоящее время я пытаюсь реализовать вызов 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 при первом запросе, а затем передает данные после другого запроса на перезагрузку, но проверка доступа к файлам cookie выполняется с помощью !! document.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();
}
}
Все еще входит в эту функцию "сбой" ...