flex Error#2048跨域問題的解決方法

        今天用flex寫一個下載功能時發現,在flex調試可以下載文件,但是把生成的html文件部署到tomcat上面卻下載不成功,出現2048錯誤。找了很多資料,解決方法有挺多。

        我是用以下方法解決的。

        在目標服務器上佈署crossdomain.xml文件。如下:

<span style="font-size:18px;"><?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <site-control permitted-cross-domain-policies="all" /> 
    <allow-access-from domain="*" /> 
    <allow-http-request-headers-from domain="*" headers="*"/> 
</cross-domain-policy></span>

        這樣子問題就解決了。下面還有其他的方法可以解決。

方法一:

        使用代理,把Flex要訪問的遠程文件通過asp,php,jsp等腳本讀取到本地,然後再由Flex去訪問;

方法二:

        使用Adobeflashplayer9打開程序後,點擊菜單欄中文件->創建播放器...即生成exe文件,運行exe文件即可突破安全限制;

方法三:

        1、找到這個文件夾:c:\DocumentsandSettings\<UserName>\ApplicationData\Macromedia\FlashPlayer\#Security

        2、在其下建立一個名爲"FlashPlayerTrust"的文件夾

        3、在"FlashPlayerTrust"文件夾下新建一TXT文件,內容如下:c:\d:\e:\f:\

        4、將該txt文件命名爲:"myTrustFiles.cfg"再打開你硬盤裏的SWF文件,就不會出現那個煩人的安全設置提示窗口了!

方法四:

        用HttpService它默認是有Proxy的,需要配置flex-config.xml,裏面有一段:<http-service-proxy><whitelist>………………</whitelist></http-service-proxy>
這個是白名單,一般情況下是註釋掉的,也就是默認只有本地的http://{localserver}/*和https://{localserver}/*可以訪問。其他的需要在flex-config.xml裏的自行修改成需要的。

        訪問本地自然不會跨域,不過你肯定訪問局域網其他機器了,所以是依照白名單規則,屬於跨域。
Socket沙箱問題
        在Flex安全沙箱中使用Socket進行通信時,也會受到Flash9的新安全策略的困擾。解決方法不能像在Web服務器中佈置一個crossdomain.xml來解決,或是在服務器上專門
開啓843端口來提供安全策略。有一種方法就是在接收到客戶端的連接後,向其發送安全策略。

        比如我是用JAVA來開發,客戶端的Flex會先搜索同域,及服務器的843口,看是否能得到安全策略,這時候Socket是先建立好的,可以在接收到Socket,即Accept事件發生是馬上向其發送策略串,否則客戶端就會因爲安全策略不過關而斷開,如果成功獲取策略,則客戶端將斷掉先前的那次Socket,再真正進行程序中你要求的Socket連接請求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章