ApplicationDomain与动态加载外部swf

       如何动态加载一个外部的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可能很大,加载需要时间,所以不能在一执行完load函数后就获取swf里面的内容,否则可能会出错。必须要为Loader的LoaderInfo的COMPLETE事件添加一个事件监听器,一但swf载入完毕就触发监听器指定的响应函数,在这里为onLoaderComplete,但不在代码中给出。

       如果有两个同名但实现不同的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 也没有那么神秘,它只是将分布式的类定义进行分类的一种容器,好让有相同类名但不同实现的外部类可以同时存在。














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值