我的页面上有一个iframe。由于Safari阻止了第三方Cookie,我正在尝试使用“开发人员指南”中此处建议的存储访问API:https : //webkit.org/blog/10218/full-third-party-cookie-blocking-and-more /。我从文档中复制了以下代码:
<script type="text/javascript">
window.addEventListener('load', () => {
document.getElementById('test-button').addEventListener('click', () => {
document.hasStorageAccess().then(hasAccess => {
console.log('hasAccess: ' + hasAccess);
if (!hasAccess) {
return document.requestStorageAccess();
}
}).then(_ => {
console.log('Now we have first-party storage access!');
document.cookie = "foo=bar";
console.log(`document.cookie: ${document.cookie}`);
}).catch(_ => {
console.log('error');
});
});
});
</script>
<button id="test-button">Test</button>
浏览器控制台输出:
[Log] hasAccess: true
[Log] Now we have first-party storage access!
[Log] document.cookie:
如您所见,授予似乎很成功,但仍然无法设置Cookie。有人知道出什么事了吗?
Safari版本13.0.1
编辑: Safari 13.1上的控制台输出:
[Log] hasAccess: false
[Log] error
注意:iframe
附页是src
指向该页的简单标签。
1
我有同样的问题。存储访问似乎可以访问现有的cookie,但不会存储任何新的cookie。这适用于使用“ document.cookie”以及“ Set-Cookie”标头中返回的新cookie。该文档似乎说它应该工作,但是没有。
—
Matt Cosentino
使用Safari 13.1时,该请求被拒绝,但我不明白为什么。
—
lunr
是的,这确实令人沮丧。BTW Safari 13.1开始表现相同,似乎可以访问,但设置cookie失败。
—
lunr
如本文所述,有一些规则可以授予访问权限。并且,不应该
—
Supun Kavinda
console.log('Now we have first-party storage access!');
加入then
of requestStorageAccess()
吗?
@SupunKavinda前三个规则在这里不适用。我不完全理解规则5。也许它是指已将域列入黑名单的其他机制。我也不认为这适用,但是我将尝试一些方法以查看是否相关。
—
lunr