В настоящее время я работаю над тем, чтобы сделать мой код совместимым с Safari ITP 2.0 . В методе, который запускается на onClick, у меня есть код, подобный коду ниже:
if (document.hasStorageAccess && document.requestStorageAccess) {
console.log('On Safari 12');
document.hasStorageAccess().then(
function successful(hasAccess) {
console.log('Testing if hasAccess');
if (hasAccess) {
console.log('Access granted already');
} else {
console.log('Requesting access');
document.requestStorageAccess().then(
function successful() {
console.log('Access request was a success');
window.location.reload();
},
function fail() {
console.log('Storage Access API call failed...');
});
}
},
function rejected(reason) {
console.log('hasStorageAccess failed: ', reason);
});
}
Однако, запустив эту команду, я получаю оператор записи «Сбой вызова API доступа к хранилищу ...» без запроса от Safari - что более неприятно, так это то, что раньше он работал, но теперь снова начинает отказывать. Есть ли способ отладки, почему произошел сбой вызова requestStorageAccess?
Я попытался включить журналы режима отладки ITP в соответствии с инструкциями , и я получил некоторую пользу от этого. Это дало мне эту ошибку один раз:
2018-09-04 15: 15: 40.930157-0700 0x110c87 Информация 0x0
69100 Safari Technology Preview: (WebKit)
[com.apple.WebKit: ResourceLoadStatisticsDebug] Невозможно предоставить хранилище
доступ к example.com, так как его куки заблокированы у третьих лиц
контексты, и он не получил взаимодействия с пользователем в качестве первого лица.
Но когда я получил доступ к нему в контексте первой стороны и перезагрузил страницу, у меня не было никаких дальнейших причин, почему вызов requestStorageAccess не удался. Если у кого-то есть какие-либо идеи, пожалуйста, дайте мне знать, что вы предлагаете, я пытаюсь отладить проблему.
Спасибо!