如何动态加载一个外部的swf?使用Loader类:
var _bagPanelLoader : Loader = new Loader;
/*添加事件响应,在swf加载完毕后再获取里面的资源*/
_bagPanelLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);
/*错误处理*/
_bagPanelLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onLoadError);
/*开始加载swf*/
_bagPanelLoader.load(new URLRequest("../bag.swf"));
|
如果有两个同名但实现不同的swf,若用上面的方法加载的话会失败。必须要用不同的ApplicationDomain将他们区分开来:
var _bagPanelLoader : Loader = new Loader;
/*添加事件响应,在swf加载完毕后再获取里面的资源*/
_bagPanelLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);
/*错误处理*/
_bagPanelLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onLoadError);
/*新建加载器上下文,再新建应用程序域*/
var context:LoaderContext = new LoaderContext();
context.applicationDomain = new ApplicationDomain();
/*开始加载swf*/
_bagPanelLoader.load(new URLRequest("../bag.swf"),context);
|
除了系统域,每一个ApplicationDomain都必须与一个父域相关联,若不指定ApplicationDomain的父域,则其父域为系统域。主应用程序的父域为系统域。可以在new ApplicationDomain时将父域(也是一个ApplicationDomain)作为参数传进去来指定该ApplicationDomain的父域。如:
var context:LoaderContext = new LoaderContext();
context.applicationDomain = new ApplicationDomain( ApplicationDomain.currentDomain );
|
将当前应用程序域作为新应用程序域的父域。
已加载的类仅在其父级中没有相关定义时才进行定义。不能用较新的定义覆盖已加载的类定义。
其实应用程序域
ApplicationDomain
也没有那么神秘,它只是将分布式的类定义进行分类的一种容器,好让有相同类名但不同实现的外部类可以同时存在。