Flex动态加载swc和swf中的class
2011年05月12日
flex中比较少人使用相关的反射,主要原因是因为avm编译模式,没办法做到java般的灵活的反射,那么就比较容易失去工厂模式的灵活的特性,但是flex也有相关反射,主要是用户swc和swf的反射,可以直接在内部提取class使用。
1、元数据捆绑问题
相信很多朋友也遇到相关问题 [Embed(source="resource/image/config/canvasLoading .gif" , mimeType="application/octet-stream")] public var _loadingGif:Class; 如果一个项目中捆绑过多元数据就会造成swf体积过大,但是往往也要面对一个需求,就是无需修改主要的flex源代码就可以修改嵌入文件的需求,那么用swc嵌入文件,再用flex动态加载swc是最好的办法了。
2、动态加载模块的问题
某些项目在前端的flex有可能动态加载某些模块的源代码,这些可能动态加载的UI、utils或者一些skin,放在动态加载的swc中也是一个比较好的解决方案;
3、Licence的动态加载
这个是我最常用的地方。
相关的用途就不描述那么多,如果有需要的朋友就可以找到优点了:
动态加载swc package com.shine.framework.Swc { import flash.display.Loader; import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; import flash.utils.ByteArray; import mx.controls.Alert; import mx.core.UIComponent; import nochump.util.zip.ZipEntry; import nochump.util.zip.ZipFile; public class SwcManager extends UIComponent { //swc的路径 public var swcUrl:String=""; //library swf路径 public var libraryUrl:String=""; //加载完成的方法 public var method:Function; public function SwcManager(value:String=null,completeMethod:Functi on=null) { super(); if(value!=null){ this.swcUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } this.visible=false; } //加载swc public function loadSwc(value:String=null,completeMethod:Function= null):void{ if(value!=null){ this.swcUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } if(this.swcUrl!=null){ var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE,swcLoaded); loader.addEventListener(IOErrorEvent.IO_ERROR,erro r); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.load(new URLRequest(swcUrl)); }else{ Alert.show("不可以加载空的swc地址"); } } //加载swc完成 private function swcLoaded(e:Event):void { var byte:ByteArray = e.target.data; byte = swc2swf(byte); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.CO MPLETE,libReady); loader.contentLoaderInfo.addEventListener(IOErrorE vent.IO_ERROR,swfError); loader.loadBytes(byte,new LoaderContext(false,ApplicationDomain.currentDomai n)); } private function error(e:Event):void{ Alert.show("加载"+this.swcUrl+"失败"); } private function swfError(e:Event):void{ Alert.show("加载"+this.swcUrl+"swf失败"); } //加载library 完成 private function libReady(e:Event):void { if(method!=null) method.call(this); } //解压 public function swc2swf(byte:ByteArray):ByteArray { var zipFile:ZipFile = new ZipFile(byte); var zipEntry:ZipEntry = null; if(libraryUrl!=null&&libraryUrl.length!=0) zipEntry = zipFile.getEntry(libraryUrl); else zipEntry = zipFile.getEntry("library.swf"); return zipFile.getInput(zipEntry); } } } 使用教程
首先动态加载swc var swcManage:SwcManager =new SwcManager; swcManage.loadSwc("framework.swc",loadComplete); 其次实例化object private function loadComplete():void{ var o:Object=ReferenceUtil.referenceClass("Licence.fil e::LicenceFile"); } 获取到swc中的实例就可以非常容易做相关的操作;
另外附上动态加载swf源代码 package com.shine.framework.Swf { import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; import mx.controls.Alert; import mx.core.UIComponent; public class SwfManager extends UIComponent { //swc的路径 public var swfUrl:String=""; //加载完成的方法 public var method:Function; public function SwfManager(value:String=null,completeMethod:Functi on=null) { super(); if(value!=null){ this.swfUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } } //加载swf public function loadSwf(value:String=null,completeMethod:Function= null):void{ if(value!=null){ this.swfUrl=value; } if(completeMethod!=null){ this.method=completeMethod; } if(this.swfUrl!=null){ var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.CO MPLETE ,swfLoaded); loader.load(new URLRequest(this.swfUrl)); }else{ Alert.show("不可以加载空的swc地址"); } } //加载swc完成 private function swfLoaded(e:Event):void { if(method!=null) method.call(this); } } }
发表评论
-
Flex加载多个Module时出现“TypeError: Error #1034: 强制转换类型失败”错误
2012-01-20 09:56 968Flex加载多个Module时出现“TypeError: Er ... -
Flex 笔记心得连载中
2012-01-20 09:56 723Flex 笔记心得连载中 2010年08月03日 获取焦 ... -
[tamarin系列之9] 在线的eval
2012-01-20 09:56 584[tamarin系列之9] 在线的eval 2010年06月 ... -
Flash务实主义――Loading
2012-01-20 09:56 532Flash务实主义――Loading ... -
VB 刷网站代码
2012-01-19 15:00 586VB 刷网站代码 2011年03 ... -
批处理+VBS脚本实现纯文本代码格式化输出
2012-01-19 15:00 600批处理+VBS脚本实现纯文 ... -
ASP文本文档(txt)相关操作代码
2012-01-19 15:00 690ASP文本文档(txt)相关操作代码 2011年04月22日 ... -
为方便自己看网络小说,自己写个txt按章节分段的小程序
2012-01-19 15:00 919为方便自己看网络小说,自己写个txt按章节分段的小程序 20 ... -
2011-3-9
2012-01-19 15:00 4512011-3-9 2011年03月09日 REG2BAT ... -
OpenGL开发库的详细介绍
2012-01-17 04:43 517OpenGL开发库的详细介绍 ... -
转载:OpenGL显示文字
2012-01-17 04:43 541转载:OpenGL显示文字 2010年07月03日 本课 ... -
VS2005配置OpenGL
2012-01-17 04:43 1000VS2005配置OpenGL 2011年06月24日 昨 ... -
OpenGL的安装
2012-01-17 04:43 624OpenGL的安装 2010年06月20 ... -
opengl
2012-01-17 04:43 685opengl 2010年11月17日 ... -
C#面试题集锦(你值得拥有!)
2012-01-16 03:37 1106C#面试题集锦(你值得拥 ... -
ASP.Net考试复习资料
2012-01-16 03:37 903ASP.Net考试复习资料 2011 ... -
ASP小偷(三):文档对象模型DOM
2012-01-16 03:37 1093ASP小偷(三):文档对象模型DOM 2009年08月22日 ... -
javascript:history.go()和History.back()的区别
2012-01-16 03:37 780javascript:history.go()和History ... -
经典的串口调试助手源代码(一)
2012-01-16 03:37 646经典的串口调试助手源代码(一) 2011年05月26日 ...
相关推荐
这是flex3引用的swc包,创建项目的时候用的,类似java的jar包。供大家参考使用,谢谢!
直接使用flex的sdk生成swc文件,很繁琐,而且对于大项目来说,是个头痛的事情。ant在对java打包生成jar时,它优良的设计显露无疑,这里我们使用它,来生成swc,完成项目编译打包。
NULL 博文链接:https://huagenli.iteye.com/blog/710475
flex解析json的swc包(entity-flex-v1-02)及例子
FLEX动态加载gif图形,需要的GifPlayer.swc,导入包,new gifplayer(),来使用
cairngorm.swc供需要的朋友急用
apahce flex sdk 4.14.1中提取的,请存放于{你的SDK}\frameworks\libs 文件夹内
Flex Mate框架swc包及Mate用法。
里面的swf 我自己用过 绝对没有问题 另外使用fusioncharts的朋友 也希望你们与我交流
apparat, optmize ABC,SWC和SWF文件的框架 Apparathttp://apparat.googlecode.com/Apparat is a framework to work with ABC, SWC and SWF files. You can use
flex 翻页效果swc包 例子代码 http://blog.csdn.net/xuhuanchao/archive/2009/11/12/4804276.aspx#1373163
FlexPaper的flex的swc文件,两个swc文件,引入flex工程便可以调用api。
flex更容易操作Excel,导入excel文件等操作
用这个包,你可以很快的给Flex3 VBox等添加上背景图片
在Flex应用中嵌入HTML代码或者网页,可以使用Iframe实现
flex反编译工具 ,对swf swc 文件进行反编译
hessian与flex交互,所以用到的swc包
flex amCharts图表的第三方工具包,希望能帮到大家。
这不是一本书,只是一个开发FLEX程序必需要用到的类库。
arcgis server9.3 flex swc