2016-07-26 2 views
13

問題ことによってそれを無効にします。 https://github.com/ofirdagan/cross-domain-local-storageローカルストレージクロスドメインSafariはデフォルト


問題

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

それはHTML5のローカルストレージを実装しています。

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

enter image description here

デフォルトは次のとおりです。 "私が訪問ウェブサイトからの許可します"。

私は、これらの設定について読み:

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

  2. 現在のウェブサイトからのみ許可 - 第1者のすべてのCookieを許可し、すべての第三者のCookieをブロックします。

  3. は私が訪問ウェブサイトから許可 - すべてのファーストパーティのCookieを許可し、その第三者が一度に最初のパーティーだった場合を除き、すべてのサードパーティのCookieをブロック(現在のクッキーや閲覧履歴に基づきます)。

  4. 常に許可 - ファーストパーティのすべてのCookieを許可し、すべての第三者のCookieを許可します。


ソリューション私は試してみました:

のiframe(ピクセル)と

ローカルストレージ - Is there any workaround to set third party cookie in Iframe for safari?


私がいることを考える - 私はもはやSafariで動作すると思うんSafari上で第1者と第三者のサイト間でローカルストレージを共有する方法があります。 (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> 

誰かがSafariをサポートするためにいくつかのAPIロジックを変更することで、どうすれば達成できるのか分かりますか?

サファリ7+(OSX、iOS版)の

+0

クロスブラウザのローカルストレージのためのシンプルなAPIを公開しています。それは別のものです。 Cookieはローカルストレージにはまったく関係ありません。したがって、ローカルストレージを使用する場合、クッキー処理ポリシーはローカルストレージに問題を引き起こすことはありません。 – hindmost

+0

私は、Cookieとローカルストレージが異なることを知っています。しかし、私が「常に許可する」に変更すると、ローカルストレージはクロスドメインから読み込まれます。 ローカルストレージは「and website data」に関連していると思います。 私はあなたにそれの例を送ることができます。(サイトXのローカルストレージにデータを格納し、次にデータを読み込もうとするサイトYに移動します)。 –

+1

このSafariのバージョンはどのように変更されましたか? – mash

答えて

6

を参照してください。ドキュメントごとの通り:

store.jsクッキーやローカルストレージを混同しないでください

+5

store.jsはクロスドメインで動作しますか?私はそれがクロスブラウザーと言われているところを見ていますが、クロスドメインへの参照は全くありません。 –

+0

誰もが、これがSafariのクロスドメインで動作しないのではないかと疑問に思います。トップレベルのドメインが「site-a.com」、iframeが「site-b.com」の場合は、「site-b」のデータが消去されます。 –

3

ノート

すべてのクロスドメインのローカルストレージ・アクセスはサファリ7+と、デフォルトでは無効になっています。これは、「Cookieと他のウェブサイトのデータをブロックする」プライバシー設定が「第三者と広告主から」に設定されているためです。クロスストレージクライアントコードはクラッシュしませんが、サンドボックス化された独立したローカルストレージインスタンスにのみアクセスできます。このように、他の起源によって以前に設定されたデータのいずれにもアクセスすることはできない。オプションの場合、ユーザーエージェントのルートクッキーを使用するか、サーバー側のストアからデータを要求することができます。

詳細については、あなたがStore.JSを試して、このlib