【发布时间】:2016-11-29 18:30:00
【问题描述】:
问题:
我用过Ofir Dagan的github项目:Storing cross domain local storage。
它实现了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 来实现它吗?
任何帮助表示赞赏!
【问题讨论】:
-
不要混淆 cookie 和本地存储。那是不同的东西。 Cookies 根本与本地存储无关。因此,如果您使用本地存储,cookie 处理策略不会导致本地存储出现任何问题。
-
我知道Cookies和本地存储是不同的。但是当我更改为:“始终允许”时,本地存储是从跨域读取的。我猜本地存储与“和网站数据”有关。我可以给你发一个例子..(将数据存储在站点 X 的本地存储中,然后转到站点 Y 尝试读取数据)。
-
此行为在哪个 Safari 版本中发生了变化?
-
首选项在 V8 中已更改..
标签: javascript html safari cross-domain local-storage