2010-09-22 55 views
1

这里的目标是:跨域进行JavaScript调用

取消引用远程服务器上JavaScript文件的脚本标记。该JavaScript文件应该返回HTML,然后将显示在调用HTML页面上。

我已经尝试两种方法可以解决这个:

首先,我试图使用XMLHttpRequest在JavaScript中调用这个远程服务器。在IE中,它会按预期工作,但FF,Safari和Chrome会返回空的响应。我从我的研究得到的总体回应是,该请求被阻止,因为它试图访问的服务器与其运行的位置不同(本地主机,但不同的端口)。

其次,我研究了Google Gadgets是如何工作的,因为它们有效地为您提供了引用外部JavaScript的简单脚本标记。从我可以收集的信息来看,似乎有一些iframe操作只是简单地通过使用基本url(下面的示例)进行。这似乎是要走的路,即使使用iframe不是我最初的想法。我猜测Google代码正在将iframe作为HTML返回到嵌入了此脚本的HTML文件中。

任何关于我应该如何进行的建议?

<script src="http://www.gmodules.com/ig/ifr?url=http://ralph.feedback.googlepages.com/googlecalendarviewer.xml&amp;synd=open&amp;w=320&amp;h=200&amp;title=&amp;border=%23ffffff%7C3px%2C1px+solid+%23999999&amp;output=js"></script> 

回答

2

JSONP是应对same origin policy一种很常见的方式。由于大多数javascript框架(例如jquery)已经支持它,所以您不必进入技术细节就可以使用它。
你也可以通过构建来自javascript的script标签来自己动手(如你所提到的)。谷歌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的想法(如果我理解你currectly),这是不是要去工作。您可以在页面上使用iframe元素来显示来自其他服务器的内容,但浏览器不会让您使用javascript从主页面访问它。

编辑
这原提案的细节JSONP用法:
http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/