ページにiframeがあります。SafariがサードパーティのCookieをブロックしているため、「開発者向けガイダンス」で以下の提案に従ってStorage Access 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
のrequestStorageAccess()
?
@SupunKavinda最初の3つのルールはここでは適用されません。ルール5を完全には理解していません。ドメインをブラックリストに登録している他のメカニズムを参照しているのかもしれません。これも当てはまるとは思いませんが、それが関連しているかどうかを確認するためにいくつかのことを試みます。
—
lunr