Angular JS,发送对象或字符串以跨域

时间:2016-06-14 10:17:54

标签: javascript angularjs local-storage

我正在创建一个带有角度的Intranet Web应用程序 它有多个不同域的仪表板。

我需要将当前用户重定向到另一个仪表板并发送一个对象。

我尝试过使用localstorage,但它只有一个域的本地存储。

那么,有什么想法吗?

1 个答案:

答案 0 :(得分:0)

当然可以使用LocalStorage ......

正如您在问题中提到的那样,您正在制作Intranet webapp,显然您将只有一台服务器在您的网络上托管它。浏览器将允许您的存储进入本地存储,您可以从所有仪表板访问您的值。 (我可以选择多个仪表板,而不是多个用户,每个控制台,每个或多个用户都有多个仪表板。)。所以这些东西不需要跨域......

如果你想传递一些跨域对象,请通过URL传递它的值。你可以在另一边轻松访问它..

对于跨域localstorage共享,

您可能知道,LocalStorage是基于域的。您无法从不同域上的localstorage读取或写入,即使该子域也是如此。但是有一些iframe技巧可以用来将数据从域存储到它的子域。

您通常会创建一个托管在子域上的iframe,该iframe将document.domain设置为父域。然后将PostMessage发送到iframe,在iframe内部设置localStorage的值。

这是代码

主档

<script>
window.onload = function() {
    var win = document.getElementsByTagName('iframe')[0].contentWindow;
    var obj = {
       name: "Jack"
    };
    win.postMessage(JSON.stringify({key: 'storage', data: obj}), "*");
};
</script>
<iframe style="display:none" src="http://sub.domain.com/iframe.html"></iframe>

如果要从LocalStorage保存和加载值,可以使用方法键PostMessage来指示需要采取的操作。您还可以从iframe向其父级发回消息,并从localStorage读取数据。

<强> IFRAME

document.domain = "domain.com";
window.onmessage = function(e) {
    if (e.origin !== "http://domain.com") {
        return;
    }
    var payload = JSON.parse(e.data);
    switch(payload.method) {
        case 'set':
            localStorage.setItem(payload.key, JSON.stringify(payload.data));
            break;
        case 'get':
            var parent = window.parent;
            var data = localStorage.getItem(payload.key);
            parent.postMessage(data, "*");
            break;
        case 'remove':
            localStorage.removeItem(payload.key);
            break;
    }
};

以及域名主页

window.onload = function() {
    var win = document.getElementsByTagName('iframe')[0].contentWindow;
    var obj = {
       name: "Jack"
    };
    // save obj in subdomain localStorage
    win.postMessage(JSON.stringify({key: 'storage', method: "set", data: obj}), "*");
    // load previously saved data
    win.postMessage(JSON.stringify({key: 'storage', method: "get"}), "*");
    window.onmessage = function(e) {
        if (e.origin != "http://sub.domain.com") {
            return;
        }
        // this will log "Jack"
        console.log(JSON.parse(e.data).name);
    };
};