2010-10-20 61 views
1

當試圖從我的SWF文件的域不同的域加載SWF,我得到這個錯誤:從另一個域訪問的SWF

*安全沙箱衝突* 的SecurityDomain「文件:/// C: /文件和設置/首頁/我的文檔/的Flex Builder 3/SwfLoad/bin中調試/ SwfLoad.swf」試圖訪問不兼容的情況下

'http://mydomain.com/crossdomain.xml' 

加載類的失敗。類名是MGroundTileInsideZ1失敗錯誤是引發SecurityError:
錯誤#2119:安全性違規:呼叫者文件:/// C:/ Documents和設置/首頁/我的文檔/的Flex Builder 3/SwfLoad/bin中調試/ SwfLoad.swf
無法訪問由http://mydomain.com/zoom_assets/GroundTiles.swf擁有的LoaderInfo.applicationDomain。

這裏是我的crossdomain.xml:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
<site-control permitted-cross-domain-policies="all"/> 
<allow-access-from domain="*" to-ports="*" secure="false"/> 
<allow-http-request-headers-from domain="*" headers="*" secure="false"/> 

這裏是我的ActionScript代碼:

package { 
    import flash.display.Loader; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.net.URLRequest; 
    import flash.system.ApplicationDomain; 
    import flash.system.LoaderContext; 
    import flash.system.Security; 

    public class SwfLoad extends Sprite 
    { 
     public function SwfLoad() 
     { 
      Security.loadPolicyFile("http://mydomain.com/crossdomain.xml"); 
      var loader:Loader = new Loader(); 
      var url:String = "http://mydomain.com/zoom_assets/GroundTiles.swf"; 
      var request:URLRequest = new URLRequest(url); 
      var context:LoaderContext = new LoaderContext(); 
      context.checkPolicyFile = true; 
      context.applicationDomain = ApplicationDomain.currentDomain; 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
        function(e:Event):void { 
         try { 
          var className:String = "MGroundTileInsideZ1"; 
          var appDomain:ApplicationDomain = loader.contentLoaderInfo.applicationDomain; 
          var cl:Class = appDomain.getDefinition(className) as Class; 
          //var cl:Class = getDefinitionByName(className) as Class; 
         } 
         catch (e:Error) { 
          trace("loading of class failed. class name is " + className + " failure error is " + e); 
         } 
        }); 
      loader.load(request,context); 
     } 
    } 
} 
+0

我只是測試它與Flash Builder 4,SDK 4.1和Flash Player 10.1一起工作。 – 2010-10-20 07:37:49

+0

我使用Flex Builder 3,SDK 3.0和Flash Player 10.1的工作,但它不工作。它只有在我這樣做後才起作用:context.securityDomain = SecurityDomain.currentDomain; – dharm0us 2010-10-20 07:54:09

回答

1
context.securityDomain = SecurityDomain.currentDomain; 

我必須包括上述太行...

而事實上,我能弄死:

Security.loadPolicyFile("http://mydomain.com/crossdomain.xml"); 

context.checkPolicyFile = true; 
0

嘗試從本地Web服務器從文件系統上執行您的SWF代替。 在Flash Builder中,轉至項目的屬性並選擇Flex構建路徑。更改輸出文件夾和輸出文件夾URL以匹配您的Web服務器的文檔根目錄及其相應的URL。

如果您仍然需要從本地文件系統啓動SWF嘗試調整的Flash Player's security settings並添加本地目錄到受信任的。

+0

我已經從本地網絡服務器上運行... – dharm0us 2010-10-20 07:48:32