【发布时间】:2019-02-09 22:02:22
【问题描述】:
我目前正在努力使我的代码与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);
});
}
但是,运行它会得到日志语句“'Storage Access API call failed...'”而没有来自 Safari 的提示 - 更令人沮丧的是它以前工作但现在又开始失败了。有什么方法可以调试 requestStorageAccess 调用失败的原因吗?
我尝试按照the instructions 启用 ITP 调试模式日志,我确实从中得到了一些用处。它给了我一次这个错误:
2018-09-04 15:15:40.930157-0700 0x110c87 信息 0x0
69100 Safari 技术预览:(WebKit) [com.apple.WebKit:ResourceLoadStatisticsDebug] 无法授予存储 访问 example.com,因为它的 cookie 在第三方中被阻止 上下文,并且它没有作为第一方接收用户交互。
但是当我在第一方上下文中访问它并重新加载页面时,我没有进一步的理由说明对 requestStorageAccess 的调用失败。如果有人有任何想法,请告诉我您的建议我尝试调试问题。
谢谢!
【问题讨论】:
标签: javascript cookies iframe safari storage-access-api