問題:
Ofir Daganのgithubプロジェクトを使用しました:ドメイン間ローカルストレージの保存。
Html5ローカルストレージを実装します。 https://github.com/ofirdagan/cross-domain-local-storage
問題:
SafariはデフォルトでサードパーティのCookieを許可していません(他のブラウザでは許可されています)。
Safariのプライバシー設定は次のとおりです。
デフォルトは「アクセスしたWebサイトからの許可」です。
私はこれらの設定について読みました:
常にブロックする-すべてのファーストパーティCookieをブロックし、すべてのサードパーティCookieをブロックします。
現在のWebサイトからのみ許可-すべてのファーストパーティCookieを許可し、すべてのサードパーティCookieをブロックします。
アクセスしたWebサイトから許可する-サードパーティが一度にファーストパーティでなかった場合を除き、すべてのファーストパーティCookieを許可し、すべてのサードパーティCookieをブロックします(ベース現在のCookieと閲覧履歴)。
常に許可する-すべてのファーストパーティCookieを許可し、すべてのサードパーティCookieを許可します。
私が試した解決策:
Iframeを使用したローカルストレージ(ピクセル)-Safariでは機能しないと思います- SafariのiframeにサードパーティのCookieを設定するための回避策はありますか?
Safariのファーストパーティとサードパーティのサイト間でローカルストレージを共有する方法はあると思います。 (Facebook.comとBooking.comは異なるドメイン間でデータを共有します)。
私はAPIを削除して自分で作成することで成功しましたが、APIを削除して自分で実装したくありません(小さな修正が必要です) Safariをサポート):
Iframe.html
:
window.addEventListener('cors_event', function(event) {
if(event.event_id === 'my_cors_message'){
if (event.data.options.funcName == "SetItem") {
localStorage.setItem(event.data.options.key, event.data.options.value);
}
else if (event.data.options.funcName == "GetItem") {
return localStorage.getItem(event.data.options.key);
}
}
});
MainPage:
<iframe id="target" src="iframe.html" frameborder="1"></iframe>
<script>
var target = document .getElementById('target');
target.onload = function(){
target.contentWindow.postMessage('set', '*')
}
</script>
では、誰かがAPIロジックを変更してSafariをサポートすることでそれを達成する方法を知っていますか?
助けてくれてありがとう!
Store.JS を試すことができます。ドキュメントによると:
store.jsは、クロスブラウザーのローカルストレージ用のシンプルなAPIを公開します
クロスストレージライブラリのドキュメント で述べたように:
Safari 7以降(OSX、iOS)に関する注意事項
Safari 7以降では、すべてのクロスドメインローカルストレージアクセスがデフォルトで無効になっています。これは、「Cookieと他のWebサイトのデータをブロックする」プライバシー設定が「サードパーティと広告主から」に設定されているためです。ストレージ間クライアントコードはクラッシュしませんが、サンドボックス化された分離されたローカルストレージインスタンスにのみアクセスできます。そのため、以前に他のオリジンによって設定されたデータにはアクセスできません。オプションの場合、それらのユーザーエージェントにルートCookieを使用するか、サーバー側のストアからデータを要求することにフォールバックする可能性があります。