2010-10-20 65 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