web-dev-qa-db-ja.com

ローカルストレージのクロスドメイン-Safariはデフォルトでドメインを無効にします

問題

Ofir Daganのgithubプロジェクトを使用しました:ドメイン間ローカルストレージの保存。

Html5ローカルストレージを実装します。 https://github.com/ofirdagan/cross-domain-local-storage


問題

SafariはデフォルトでサードパーティのCookieを許可していません(他のブラウザでは許可されています)。

Safariのプライバシー設定は次のとおりです。

enter image description here

デフォルトは「アクセスしたWebサイトからの許可」です。

私はこれらの設定について読みました:

  1. 常にブロックする-すべてのファーストパーティCookieをブロックし、すべてのサードパーティCookieをブロックします。

  2. 現在のWebサイトからのみ許可-すべてのファーストパーティCookieを許可し、すべてのサードパーティCookieをブロックします。

  3. アクセスしたWebサイトから許可する-サードパーティが一度にファーストパーティでなかった場合を除き、すべてのファーストパーティCookieを許可し、すべてのサードパーティCookieをブロックします(ベース現在のCookieと閲覧履歴)。

  4. 常に許可する-すべてのファーストパーティ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をサポートすることでそれを達成する方法を知っていますか?

助けてくれてありがとう!

15
Alon Shmiel

Store.JS を試すことができます。ドキュメントによると:

store.jsは、クロスブラウザーのローカルストレージ用のシンプルなAPIを公開します

5
Abhi

クロスストレージライブラリのドキュメント で述べたように:

Safari 7以降(OSX、iOS)に関する注意事項

Safari 7以降では、すべてのクロスドメインローカルストレージアクセスがデフォルトで無効になっています。これは、「Cookieと他のWebサイトのデータをブロックする」プライバシー設定が「サードパーティと広告主から」に設定されているためです。ストレージ間クライアントコードはクラッシュしませんが、サンドボックス化された分離されたローカルストレージインスタンスにのみアクセスできます。そのため、以前に他のオリジンによって設定されたデータにはアクセスできません。オプションの場合、それらのユーザーエージェントにルートCookieを使用するか、サーバー側のストアからデータを要求することにフォールバックする可能性があります。

9
Yogesh Rathi