星期三, 1月 02, 2008

flash player跨網域的問題 (flex3與flash cs3都適用)

今天花了一整天的時間在研究RSS,先是用flex3來寫RSS的簡易版閱讀器,完成後卻發現本機可以執行,一upload到網路後卻動彈不得了,原來是flash player跨網域的問題。

flash player要讀遠端的RSS資料(也就是載入一個遠端的XML),基本的解法,如是在不同子網域(如www.m-w.com.tw或npbp.m-w.com.tw),那就只需要在flash中寫一個System.security.allowDomain("*.m-w.com.tw")就可以了;若是不同的網域(如www.m-w.com.tw或www.edimax.com.tw那就需要寫一個crossDomain.xml(寫法可參考這),然後把這crossDomain.xml檔案放到提供資料的那一端才行,比如你想載入yahoo的RSS(就像這個),那你需要將crossDomain.xml這檔案放到yahoo的server中才可以。...............這怎麼可能呢?在作夢嗎?

我在想,這是不是flex3的限制,所以改採flash cs3也寫一個RSS的簡易版閱讀器,結果一樣,無法解決flash player跨網域的問題,有一篇在介紹flash player安全性的文章寫得很好,可以參考一下。

最後,想到了個方法,先用php將遠端yahoo的RSS讀進來,這不就是在本地端了嗎,然後再用flash去載入php不就解決了!沒錯,這就是正解,雖然很笨,但還是解決了(成品在師大師培處網站的左上方新聞區),看了網路上一些前輩們似乎也是用相同的方法來解決兩個不同網域的問題。

其實我想,應該有更高級一點的解法,flex3都可以支援wsdl直接轉換成as來用了,表示flex對於web service的支援性相當的好,RSS(XML)應該更不在話下,小弟才疏學淺,如果有哪位前輩通曉解決良方,望請指導一下囉!