2010-06-19 69 views
2

我想从维基百科加载一个xml文件到我的flash电影中。AS3从不同的域加载XML

loader = new URLLoader(); 
loader.addEventListener(Event.COMPLETE, tweetLoaded); 
loader.load(new URLRequest("http://en.wikipedia.org/w/api.php?action=query&rvprop=content&format=xml&pageids="+subNum)); 
loader.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorFunction); 

当Flash文件在本地运行但是当我上传到我的域时似乎不起作用。我在其他地方看过,跨域规则不适用于XML文件只适用于图像和其他媒体。这是真的?如果不是,那么我可以加载来自swf托管的域以外的XML文件?

感谢

编辑:

好吧我真的很困惑,我的程序查询两个兵API和维基媒体API。 Bing api调用工作正常,我可以很好地检索XML搜索结果。但维基百科的通话不起作用(在线)。我试图在维基百科上调用Security_Error,但它不会触发。

有没有人有任何想法?失去一点。

回答

3

解决方法是使用某种服务器端语言设置代理,以便您的swf从您的域加载来自的数据。该代理将请求转发给真实主机并将响应返回给swf。从闪存的角度来看,这是透明的。

你可以让你的代理或多或少sofisticated,但它可能是因为(在PHP)一样简单:

echo file_get_contents($_GET['target_url']); 

这只是给你一个想法,你可能想验证target_url参数。

让你的swf调用这个php脚本并传递target_url作为参数。事情是这样的:

var url:String = "proxy.php"; 
var paramVal:String = encodeURIComponent("http://en.wikipedia.org/w/api.php?action=query&rvprop=content&format=xml&pageids="+subNum); 
url += "?target_url=" + paramVal; 
loader.load(new URLRequest(url)); 

注意,对于PHP,这将需要的URL允许的fopen(类似权限可能是neccesary其他服务器端技术)。另外,请记住这会影响您的服务器带宽消耗。

PS

兵的作品,因为他们有一个适当的跨域策略文件允许访问其他域中的主权财富基金。

http://api.bing.net/crossdomain.xml

维基百科没有授予来自其他域你访问,所以你不能直接从你的SWF连接一个跨域策略文件。

+0

啊,谢谢你,这似乎很奇怪我也查询BING检索图片,我可以做一个跨域XML文件是不可能的闪光? – 2010-06-20 08:11:27

+0

@ user150946。看看我关于Bing的编辑。 – 2010-06-20 20:34:29

+0

感谢您的澄清。是否有可能使用Javascript/JQuery而不是PHP? – 2010-06-21 11:53:55

5

非常感谢您的帮助。在最后我用http://pipes.yahoo.com

我创建了一个管道,接受了一个ID号,然后吐出一个JSON对象与相应的维基百科页面的标题。

,你可以在这里使用http://pipes.yahoo.com/wikibyid

为别人这样做,你需要确保你从雅虎API URL http://pipes.yahooapis.com/ 作为这一领域进入管具有crossdomain.xml文件。

+0

很高兴你能解决这个问题,我不知道这个服务是否存在,很高兴知道,看起来非常酷,它绝对有用,谢谢分享! – 2010-06-21 21:58:56