跨域javascripting的替代方案?

时间:2009-10-24 20:26:45

标签: javascript proxy cross-domain

目前我依靠代理脚本来处理单一来源政策的问题。它很慢,并且会产生开销。更不用说,javascript不会呈现。

那里有替代工作吗?

5 个答案:

答案 0 :(得分:5)

如果您可以提供回调名称作为提供相关JavaScript代码的服务的参数,那么您可以在文档中附加脚本标记,其中src属性指向服务调用。否则,你运气不好。

答案 1 :(得分:2)

使用iframe并尝试window.postMessage(message, origin)(来自iframe的parent.postMessage和来自首页的iframeElement.contentWindow.postMessage对于所有最新的主要浏览器(Firefox,IE,Safari, Chrome等等)和旧浏览器的更改/轮询window.name

答案 2 :(得分:1)

哦亲爱的,我认为您正在寻找的解决方案是使用IFRAME。然而,iframe方法既是精神上的,也是技术上的。我建议你从本指南开始:

Cross-Domain Communication with IFrames

另一种方法是使用脚本标记和json异步从另一台服务器获取数据:

<script src="http://remotesite.com/path/to/script/blah.js"></script>

您可以创建一个新的SCRIPT标记元素来传递和加载数据并附加到DOM或将标记插入元素innerHTML。

我确信你可以找到一些详细的例子和方法来实现,但有一件事你应该跟踪新的SCRIPT方法是添加这么多的DOM。这可能有所帮助,并为您提供一个起点:

function require (url, callback) {
    if (!isScriptLoaded(url)) { 
        document.write('<script src="' + url + '" type="text/javascript" charset="utf-8"><\/script>');

        if (callback) {
            callback();
        }
    }
}

function isScriptLoaded(src) {
    var scriptsLoaded =  {};
    var scriptTags    = document.getElementsByTagName("script");

    for (var i = 0, script; script = scriptTags[i]; i++) {
        if (script.src) { 
            scriptsLoaded[script.src] = 1;
        }
    };

    if (scriptsLoaded[src]) {
        return true; 
    }

    return false;
}

(未经测试,但应该工作!)

无论哪种方式 - 祝你好运。

答案 3 :(得分:1)

JSON-P非常适合这种事情。如果您正在使用jQuery或类似的JavaScript库,那么您的工作将更加轻松:

http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback

当然,它将取决于您正在尝试做什么,这将决定是使用JSON-P,隐藏的iframe,postMessage,Flash代理还是任何其他奇特的解决方案。

答案 4 :(得分:1)

如果您控制两个域并且只关心Firefox 3.5+,则可以使用XMLHttpRequest对象并使用Access Control设置权限。