ApplicationDomain 是存放AS3定义(包括类、方法、接口等)的容器。使用Loader类加载swf时可以通过指定 ApplicationDomain 参数将swf加载到不同的域(Domain)。
var loader : Loader = new Loader(); var context : LoaderContext = new LoaderContext(); /* 加载到子域(模块) */ context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); /* 加载到同域(共享库) */ context.applicationDomain = ApplicationDomain.currentDomain; /* 加载到新域(独立运行的程序或模块) */ context.applicationDomain = new ApplicationDomain(); loader.load(new URLRequest("loaded.swf"), context);
package {
import flash.display.MovieClip;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
import flash.system.Security;
import flash.external.ExternalInterface;
import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedClassName;
import flash.accessibility.Accessibility;
public class b extends MovieClip {
private var _loader:Loader;
public function b():void {
init();
}
public function init():void{
_loader = new Loader();
var _urlRequest:URLRequest = new URLRequest("a.swf");
var _domain:ApplicationDomain = new ApplicationDomain();
var _loaderContext:LoaderContext = new LoaderContext(false,_domain);
_loader.load( _urlRequest, _loaderContext);
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, moduleLoadComplete);
}
public function moduleLoadComplete(event:Event):void{
var ClassReference:Class = _loader.contentLoaderInfo.applicationDomain.getDefinition("a") as Class;
var b:MovieClip=(new ClassReference()) as MovieClip;
b.showmsg();
}
public function showmsg():void{
trace("hi!!!");
}
}
}
-------------------------
package { import flash.display.MovieClip; public class a extends MovieClip { public function a():void { init(); } public function init():void{ trace("initt"); } public function showmsg():void{ trace("你好!!!"); } } }