2010-06-19 66 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