开发者

Accessing a swf from another domain

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://example.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://example.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">
<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.loadPol开发者_开发百科icyFile("http://example.com/crossdomain.xml");
            var loader:Loader = new Loader();
            var url:String = "http://example.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);
        }
    }
}


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;  


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜