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开发中用到的一些类.zip"的压缩包显然包含了用于Flash动画和游戏开发的关键类文件。让我们详细探讨一下这些知识点。 首先,Flash是一款强大的多媒体创作工具,它被广泛应用于创建互动式的动画、...
在IT行业中,Flash图形开发是一项重要的技能,尤其是在创建交互式内容、动态图形和网页动画时。Flash曾经是互联网上多媒体内容的主要制作工具,虽然现在HTML5已经逐渐取代其地位,但在一些特定领域,如游戏开发和...
2. **添加控件到工具箱**:在Visual Studio中,打开“工具箱”窗口,右键点击,选择“选择项”,然后在弹出的对话框中浏览并添加刚刚安装的Flash控件库。这样,Flash控件就会出现在工具箱中,方便后续使用。 3. **...
在Flash开发中,加载外部图片是一项常见的需求,它允许我们动态地从服务器或者本地加载图像资源,提升用户体验,实现内容的动态更新。本教程将详细讲解如何在Flash中实现加载外部图片的功能。 首先,我们需要了解...
Loader 类是AS3 中用于加载各种类型媒体的核心类,包括图像(JPEG、PNG、GIF等)。以下是一个使用Loader 加载图片的典型步骤: 1. 首先,创建一个Loader 对象实例。 ```actionscript var loader:Loader = new ...
1. 创建Flash项目:首先,我们需要在Flash环境中创建一个新的AS3项目,确保选择ActionScript 3.0作为框架,因为这支持更高级的编程特性。 2. 使用Loader类:在ActionScript中,我们可以使用`flash.display.Loader`...
系统中包含的`答题 cs4-2.fla`和`答题 cs4-2.swf`文件是Adobe Flash开发的源文件和编译后的可执行文件。Flash作为一种强大的交互式内容创建工具,被用于构建试题展示和用户交互界面。`答题 cs4-2.fla`是Flash的源...
在React和Webpack的开发环境中,整合CSS Modules是一个常见的需求,特别是在构建模块化和可复用的前端组件时。`css-loader`是Webpack中用于处理CSS的加载器,而`modules`选项则是`css-loader`的一个关键特性,它使得...
在开发过程中,有时我们需要在不同语言之间共享代码或功能,这时动态链接库(DLL)就发挥了重要作用。本教程将详细讲解如何在Visual Studio 2015(VS2015)中使用C++创建一个DLL,并在C#项目中进行调用,同时介绍...
这个“android中用ndk编译c并用jni调用的demo源码”提供了实践NDK和JNI集成的实例,帮助我们深入理解它们的工作原理和使用方法。 首先,NDK是Android开发的一个组成部分,它允许开发者使用C、C++语言编写部分应用...
本压缩包"Redis中用到的C#dll库.rar"包含的就是几个关键的C#库,这些库使得在.NET环境中使用Redis变得更加方便。 首先,`ServiceStack.dll`是ServiceStack框架的核心库,它是一个高性能、轻量级的Web服务栈,支持...
在这个标题为“Flex3中用到的工具类包,含有json类”的资源中,我们可以看到它包含了处理JSON(JavaScript Object Notation)数据的工具类。JSON是一种轻量级的数据交换格式,由于其简洁和高效的特性,在网络通信中...
LoaderRunner 函数篇 LoaderRunner 是一个功能强大且广泛应用于性能测试和压力测试的自动化测试工具。它提供了丰富的函数库,允许用户灵活地定义和控制测试用例的执行。下面我们将详细讲解 LoaderRunner 的三个...
总的来说,"c#中用到的皮肤资源"这个主题是C# UI开发中一个重要的实践领域,它涉及到用户界面设计、资源管理、性能优化等多个方面,对于提升应用程序的用户体验和专业形象具有重要意义。通过深入学习和实践,开发者...
标题提到的"C#开发中用到的反射工具"主要指的是利用反射来操作和扩展应用程序的功能。在.NET框架下,C#程序员可以通过System.Reflection命名空间中的类来实现反射。 描述中提到的".exe文件,用户直接拖入.dll控件既...
在软件开发过程中,文档起着至关重要的作用,它们记录了项目的各个阶段,帮助团队成员保持一致性和理解。以下是一些常见的软件开发文档模板及其详细解释: 1. 可行性研究报告:这是项目启动阶段的关键文档,它评估...
C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程开发中用好位操作符C语言编程...
完全的通用USB开发库,不需要要任何的驱动(Windows自带),本人开发USB上位机软件包时,发现都是非托管的C++调用库,C#调用库非常少。所以收集了这个,供用.NET方式开发USB的朋友使用。(也包含VC++调用案例)
在Android Java开发中,工具类(Utils类)是开发者经常使用的辅助代码集合,它们封装了各种通用功能,以便在项目中快速调用。这个名为"java-utils-master"的压缩包很可能是包含了一系列实用工具类的开源项目。下面,...
在VC++开发环境中,使用Tree控件来构建一个类似Windows资源管理器的界面是一项常见的任务。这个过程涉及到对MFC(Microsoft Foundation Classes)框架的深入理解,尤其是对CTreeCtrl类的运用。CTreeCtrl是MFC提供的...