2016-07-26 151 views
13

問題禁用它。本地存儲跨域Safari瀏覽器默認

它實現HTML5本地存儲空間: https://github.com/ofirdagan/cross-domain-local-storage


問題

Safari不默認允許第三方Cookie(其他瀏覽器允許的話)。

Safari的隱私偏好:

enter image description here

默認爲: 「從網站允許我遊」。

我讀到這些設置:

  1. 始終阻止 - 阻止所有第一方Cookie和阻止所有第三方Cookie。

  2. 僅允許從當前網站上下載 - 允許所有的第一方cookie並阻止所有第三方cookie。

  3. 從網站我訪問允許 - 允許所有第一方Cookie和阻止所有第三方Cookie,除非該第三方是在同一時間,第一方(基於當前的cookies和瀏覽歷史記錄)。

  4. 始終允許 - 允許所有第一方cookie並允許所有第三方cookie。


解決方法我都試過

本地存儲與一個iframe(像素) - 我覺得它不再適用於Safari瀏覽器 - Is there any workaround to set third party cookie in Iframe for safari?


我認爲,有一種方法可以在Safari上的第一方和第三方網站之間共享本地存儲。 (Facebook.com和Booking.com在不同的域之間共享數據)。

我成功地通過刪除API並自己編寫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?

任何幫助表示讚賞!在Safari 7+

+0

不要混淆餅乾和本地存儲。這是不同的事情。根本不涉及本地存儲。因此,如果您使用本地存儲,Cookie處理策略不會導致本地存儲的任何問題。 – hindmost

+0

我知道Cookies和本地存儲是不同的。但是,當我更改爲「始終允許」時,將從跨域讀取本地存儲。 我想本地存儲與「和網站數據」有關。 我可以給你一個例子..(將數據存儲在站點X的本地存儲中,然後轉到嘗試讀取數據的站點Y)。 –

+1

在哪個Safari版本中這種行爲發生了變化? – mash

回答

6

你可以試試Store.JS。按照文檔:

store.js公開的跨瀏覽器本地存儲簡單的API

+5

store.js是否可以跨域使用?我看到它跨瀏覽器的地方,但沒有看到任何跨域的參考(這是非常不同的)。 –

+0

因爲任何人想知道這不適用於Safari的跨域。因此,如果您的頂級域名是「site-a.com」,並且您的iframe是「site-b.com」,則會清除「site-b」的數據。 –

3

註釋(OSX,iOS的)

所有跨域本地存儲訪問缺省情況下,使用Safari 7+禁用。這是「阻止Cookie和其他網站數據」隱私設置被設置爲「來自第三方和廣告商」的結果。任何跨存儲客戶端代碼都不會崩潰,但是,它只能訪問沙盒隔離的本地存儲實例。因此,以前由其他來源設定的數據都不會被訪問。如果有一個選項,人們可能會回到爲這些用戶代理使用根Cookie,或從服務器端存儲請求數據。

更多詳細信息請參閱本lib