flash开发的时候模拟加载不同域的swf文件并取得资源库中定义的类。Security.sandboxType为localTrusted。
资源文件lib.swf 中有3个元件(3个影片剪辑)。分别为Lib1,Lib2,Lib3 并分别导出为Class Lib1,Lib2,Lib3。
元件Lib3 中 有Lib1 跟Lib2个一个实例。
资源文件lib2.swf为空的flash文件。为配合测试使用。
lib.swf 跟lib2.swf位于网络上。http://127.0.0.1/lib.swf,http://127.0.0.1/lib2.swf
类ApplicationDomainExample 继承自Sprite,在flex builder 中将以debug方式运行。类ApplicationDomainExample 中有两个Loader,loader和 loader2。loader去load资源文件lib.swf,loader2去load资源文件 lib2.swf。并在loader2结束之后用loader.contentLoaderInfo.applicationDomain.getDefinition得到Class Lib3并实例化。
分三种load方式。LoaderContext都为new LoaderContext(false,ApplicationDomain.currentDomain)
方式一: 得到想要的结果
当loader 跟loader2在同一个方法中分别去load位于网络中的lib.swf 跟lib2.swf时此时用getDefinition("Lib3") 取得的类 完全可以new新的实例。
方式二: 失败
当loader完成之后 在去执行loader2的load在loader2 load完成时getDefinition("Lib3") 可以得到Class Lib3 。但报Type error。不能将MovieClip@xxx 转化为类 Lib1。
方式三:
跟方式二步骤一样只是loader2 load的是本地文件路径(lib2.swf)。此时得到想要的结果。
代码:
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;
/**
*flash 加载问题
* @author limingzhou
*
*/
public class ApplicationDomainExample extends Sprite
{
private var loader:Loader;
private var loader2:Loader;
private var defaultContext:LoaderContext;
public function ApplicationDomainExample() {
defaultContext=new LoaderContext(false,ApplicationDomain.currentDomain);
loader=new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComplete);
loader.load(getDefaultRequest("http://127.0.0.1/lib.swf"),defaultContext);
loader2=new Loader();
loader2.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComplete2);
/* 情况一 正常 */
//loader2.load(getDefaultRequest("http://127.0.0.1/lib2.swf"),defaultContext);
}
private function loadComplete(e:Event):void{
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,loadComplete);
getUI(loader);
/* 情况二 报错 */
//loader2.load(getDefaultRequest("http://127.0.0.1/lib2.swf"),defaultContext); //load任何swf文件 包括它自己出错
/* 情况三 正常 */
loader2.load(getDefaultRequest("lib2.swf"),defaultContext);
}
private function loadComplete2(e:Event):void {
loader2.contentLoaderInfo.removeEventListener(Event.COMPLETE,loadComplete2);
/*要取得的lib库中的导出类 */
getUI(loader);
}
private function getDefaultRequest(url:String):URLRequest{
return new URLRequest(url);
}
private function getUI(l:Loader):void{
var ui:Class=l.contentLoaderInfo.applicationDomain.getDefinition("Lib3") as Class;
trace(ui);
trace(new ui);
}
}
}
方式一跟方式二得到两种不同的结果很怪异,疑似flash 的一个问题。资源文件及完整代码见附件。(说明如果在lib.swf中 Lib1,Lib2,Lib3分别是自己定义的时候也正确这个属于解决办法的一种)
- 大小: 11.4 KB
分享到:
相关推荐
Flash图形开发Flash图形开发开发中用到的Flash图形开发开发中用到的Flash图形开发开发中用到的Flash图形开发
flash开发
web开发ASP.NET中用FLASH控件 将控件添加到工具栏中 然后拖出来用即可
flash中用一段代码就能实现真实的下雪场景 flash下雪 下雪代码
开发中用到一些工具小软件如:串口工具,字符编码转换,网络抓包,截图工具,source insignt 等
总结开发过程中DotNET中用到的常用的类 本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的
这是很有用的开发常用的类,包括一些util、 config的类
在React Webpack中,用来配合css-loader模块中的modules使用
一个使用XML文本设计的试题库,含单选、多选、填空、判别,可选择测试范围,并对测试打分,xml文档内容均可自由修改、添加、删除。
C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程...
完全的通用USB开发库,不需要要任何的驱动(Windows自带),本人开发USB上位机软件包时,发现都是非托管的C++调用库,C#调用库非常少。所以收集了这个,供用.NET方式开发USB的朋友使用。(也包含VC++调用案例)
给出软件开发过程中所用到的各种模板。共13个,其中包括可行性报告,项目开发计划,需求规格说明书,等等
java中用数组为一个类定义多个对象,并对其进行实例化
flash源码烧杯电流表等物理中用到的元件
ferns中用到的zlib库,
博客中用的资源
Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。 一、处理图片文件 默认webpack无法处理css文件中的url地址 在打包时会报错 无论是...
训练样本(资源已附一个训练样本)来自ENVI CLASSIC导出的ASCLL码格式(文本文件),执行代码会有对话框要求手动打开若干个波段的TM图像,有对话框可以调整输出图像的大小,输出图像显示并以系统时间命名保存。...
无论是图片还是字体库 只要是url地址 都无法处理 解决方法: 在项目根目录下输入cnpm i url-loader file-loader -D 安装url-loader和file-loader (url-loader内部依赖于file-loader) 然后在配置文件webpack.config....
Redis中用到的C#dll库、ServiceStack.dll、ServiceStack.Interfaces.dll、ServiceStack.ServiceInterface.dll