javascript - xhr - 服务端跨域




本地存储跨域-Safari在默认情况下禁用它 (2)

Safari 7+注意事项(OSX,iOS)

Safari 7+默认禁用所有跨域本地存储访问权限。 这是“禁止cookies和其他网站数据”隐私设置被设置为“来自第三方和广告商”的结果。 任何跨存储客户端代码都不会崩溃,但只能访问沙盒隔离的本地存储实例。 因此,以前由其他来源设定的数据都不会被访问。 如果有一个选项,那么可以使用根Cookie作为这些用户代理,或者从服务器端存储请求数据。

更多细节见这个lib

问题

我已经使用了Ofir Dagan的github项目:存储跨域本地存储。

它实现了html5本地存储: https//github.com/ofirdagan/cross-domain-local-storage

问题是

Safari默认不允许第三方Cookie(其他浏览器允许)。

Safari的隐私偏好是:

默认值是:“允许我访问的网站”。

我读了关于这些设置:

  1. 始终阻止 - 阻止所有第一方Cookie并阻止所有第三方Cookie。

  2. 仅允许来自当前网站 - 允许所有第一方Cookie并阻止所有第三方Cookie。

  3. 从我访问的网站允许 - 允许所有第一方Cookie,并阻止所有第三方Cookie,除非该第三方同时是第一方(基于当前的Cookie和浏览历史记录)。

  4. 始终允许 - 允许所有第一方Cookie,并允许所有第三方Cookie。

解决方案我试过了

本地存储与iframe(像素) - 我认为它不再适用于Safari - 有没有任何解决方法来设置第三方cookie在iframe中的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?

任何帮助感激!


你可以试试Store.JS 。 根据文档:

store.js公开了一个用于跨浏览器本地存储的简单API





local-storage