views:

40

answers:

2

When trying to load a swf from a domain different from my swf's domain, I get this error:

* Security Sandbox Violation * SecurityDomain 'file:///C:/Documents and Settings/Welcome/My Documents/Flex Builder 3/SwfLoad/bin-debug/SwfLoad.swf' tried to access incompatible context

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

loading of class failed. class name is MGroundTileInsideZ1 failure error is SecurityError:
Error #2119: Security sandbox violation: caller file:///C:/Documents and Settings/Welcome/My Documents/Flex Builder 3/SwfLoad/bin-debug/SwfLoad.swf
cannot access LoaderInfo.applicationDomain owned by http://mydomain.com/zoom_assets/GroundTiles.swf.

Here is my crossdomain.xml :

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"&gt;
<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"/>

Here is my actionscript code :

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);
        }
    }
}
A: 

Try executing your SWF from a local web server instead from the filesystem. In Flash Builder go to the properties of your project and select Flex Build Path. Change the Output folder and Output folder URL to match your web server's document root and its corresponding URL.

If you still need to start your SWF from the local filesystem try tweaking the Flash Player's security settings and add you local directory to the trusted ones.

Gerhard
I am running from a local web server already...
dta
A: 
context.securityDomain = SecurityDomain.currentDomain;

I had to include the above line too...

And In fact, I could do away with :

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

and

 context.checkPolicyFile = true;  
dta