目前我依靠代理脚本来处理单一来源政策的问题。它很慢,并且会产生开销。更不用说,javascript不会呈现。
那里有替代工作吗?
答案 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设置权限。