这是目标:
移交引用远程服务器上的JavaScript文件的脚本标记。该JavaScript文件应返回HTML,然后将显示在调用HTML页面上。
我试图通过两种方式解决这个问题:
首先,我尝试在JavaScript中使用XMLHttpRequest来调用此远程服务器。在IE中,它会按预期工作,但FF,Safari和Chrome将返回空响应。我从研究中得到的总体反应是,请求被阻止,因为它尝试访问的服务器与运行的服务器不同(本地主机,但不同的端口)。
其次,我查看了Google Gadgets之类的工作方式,因为它们有效地为您提供了一个引用外部JavaScript的简单脚本标记。从我可以收集到的内容来看,似乎只有使用的基本网址才会进行某种iframe操作(例如下面的例子)。这似乎是要走的路,即使使用iframe不是我最初的想法。我猜测Google代码将iframe作为HTML返回到嵌入了此脚本的HTML文件中。
关于我应该如何进行的任何建议?
<script src="http://www.gmodules.com/ig/ifr?url=http://ralph.feedback.googlepages.com/googlecalendarviewer.xml&synd=open&w=320&h=200&title=&border=%23ffffff%7C3px%2C1px+solid+%23999999&output=js"></script>
答案 0 :(得分:2)
JSONP是处理same origin policy的常用方法。由于大多数javascript框架(例如jquery)已经支持它,因此您无需了解技术细节即可使用它。
您也可以通过从javascript构建script
标记来自行完成操作(如您所述)。 Google Analytics代码段就是这种方法的一个示例:
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = 'url here';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
至于iframe的想法(如果我现在理解你的话),那就不行了。您可以使用页面上的iframe
元素显示来自其他服务器的内容,但浏览器不允许您使用javascript从主页访问它。
修改强>
此原始提案详细说明了JSONP的用法:
http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/
答案 1 :(得分:1)
x-domain调用需要服务器端代理。
网上有很多可用的实现,或者你可以用你选择的语言掀起一个适合你的堆栈。
此处提供了有关图形和PHP代理的更多信息 - http://developer.yahoo.com/javascript/howto-proxy.html