1. 程式人生 > >flex Error#2048跨域問題的解決方法

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連線請求。