问题:
我使用了Ofir Dagan的github项目:存储跨域本地存储。
它实现了html5本地存储: https://github.com/ofirdagan/cross-domain-local-storage
问题:
Safari默认情况下不允许第三方cookie(其他浏览器允许)。
Safari隐私首选项包括:
默认设置为:“允许我访问的网站”。
我读到了这些设置:
始终阻止 - 阻止所有第一方Cookie并阻止所有第三方Cookie。
仅允许来自当前网站 - 允许所有第一方Cookie并阻止所有第三方Cookie。
允许我访问的网站 - 允许所有第一方Cookie并阻止所有第三方Cookie,除非该第三方同时是第一方(基于当前的Cookie和浏览)历史)。
始终允许 - 允许所有第一方Cookie并允许所有第三方Cookie。
解决方案我尝试过:
使用iframe(像素)的本地存储 - 我认为它已不再适用于Safari - Is there any workaround to set third party cookie in Iframe for safari?
我认为有一种方法可以在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来实现它吗?
任何帮助表示赞赏!
答案 0 :(得分:8)
正如Cross-Storage library documentation所述:
有关Safari 7+(OSX,iOS)的说明
默认情况下,Safari 7+禁用所有跨域本地存储访问。这是&#34;阻止cookie和其他网站数据的结果&#34;隐私设置被设置为&#34;来自第三方和广告商&#34;。任何跨存储客户端代码都不会崩溃,但是,它只能访问沙盒隔离的本地存储实例。因此,以前由其他来源设置的数据都不可访问。如果是一个选项,可以回退到使用这些用户代理的根cookie,或者从服务器端存储请求数据。
答案 1 :(得分:6)
您可以尝试Store.JS。根据文档:
store.js公开了一个用于跨浏览器本地存储的简单API