加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

加载外部flash域的问题

发布时间:2020-12-15 06:40:55 所属栏目:百科 来源:网络整理
导读:如果有多个 SWF 文件中包含名称相同但实现方式不同的编译类,可以根据此示例将外部加载的 SWF 文件的类相互区分开来。先前,已指示子 SWF 使用? ApplicationDomain.currentDomain 。在本例中,创建一个新的? ApplicationDomain ,因此无论 SWF 第二次加载哪
如果有多个 SWF 文件中包含名称相同但实现方式不同的编译类,可以根据此示例将外部加载的 SWF 文件的类相互区分开来。先前,已指示子 SWF 使用?ApplicationDomain.currentDomain。在本例中,创建一个新的?ApplicationDomain,因此无论 SWF 第二次加载哪一个?Greeter?类,该类的属性和方法都不会替换第一个?Greeter?类的属性和方法。您可以通过修改?ClassLoader?的?load?方法中的context.applicationDomain?属性来测试这一点。

注意:

  • 由于 ClassLoader 类要加载 SWF 文件,因此需要文件系统级别的本地安全性。
  • 要运行此示例,必须存在两个名为 Greeter.swf 的 SWF 文件,分别位于“en”和“es”文件夹中。
使用以下代码在“en”目录下创建一个 Greeter.as 文件:
package {
? ? import flash.display.Sprite;
? ? public class Greeter extends Sprite
? ? {
? ? ? ? public function Greeter()
? ? ? ? {
? ? ? ? }
? ? ? ??
? ? ? ? public function greet():String {
? ? ? ? ? ? return("Good Morning");
? ? ? ? }
? ? }
?}
?

然后在“es”目录下创建一个十分相似的 Greeter.as 文件:
package {
? ? import flash.display.Sprite;
? ? public class Greeter extends Sprite
? ? {
? ? ? ? public function Greeter()
? ? ? ? {
? ? ? ? }
? ? ? ??
? ? ? ? public function greet():String {
? ? ? ? ? ? return("Buenos Dias");
? ? ? ? }
? ? }
}

编译两个 SWF 文件,然后实现以下代码:
package { ? ? import flash.display.DisplayObject; ? ? import flash.display.Sprite; ? ? import flash.errors.IllegalOperationError; ? ? import flash.events.Event; ? ? import flash.text.TextField; ? ? import flash.text.TextFieldAutoSize; ? ? public class ApplicationDomainExample2 extends Sprite { ? ? ? ? private var spanishGreeterLoader:ClassLoader; ? ? ? ? private var englishGreeterLoader:ClassLoader; ? ? ? ? private var tf:TextField = new TextField(); ? ? ? ? private var greetersLoaded:uint = 0; ? ? ? ? public function ApplicationDomainExample2() { ? ? ? ? ? ? tf.autoSize = TextFieldAutoSize.LEFT; ? ? ? ? ? ? addChild(tf); ? ? ? ? ? ? spanishGreeterLoader = new ClassLoader(); ? ? ? ? ? ? spanishGreeterLoader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler); ? ? ? ? ? ? spanishGreeterLoader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler); ? ? ? ? ? ? spanishGreeterLoader.load("es/Greeter.swf"); ? ? ? ? ? ?? ? ? ? ? ? ? englishGreeterLoader = new ClassLoader(); ? ? ? ? ? ? englishGreeterLoader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler); ? ? ? ? ? ? englishGreeterLoader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler); ? ? ? ? ? ? englishGreeterLoader.load("en/Greeter.swf"); ? ? ? ? } ? ? ? ? private function loadErrorHandler(e:Event):void { ? ? ? ? ? ? tf.text = "Load failed"; ? ? ? ? ? ? throw new IllegalOperationError("Cannot load the specified file."); ? ? ? ? } ? ? ? ? private function classLoadedHandler(e:Event):void { ? ? ? ? ? ? greetersLoaded++; ? ? ? ? ? ? if(greetersLoaded == 2) { ? ? ? ? ? ? ? ? greet(); ? ? ? ? ? ? ? ? } ? ? ? ? } ? ? ? ?? ? ? ? ? private function greet():void { ? ? ? ? ? ? var spanishGreeter:Class = spanishGreeterLoader.getClass("Greeter"); ? ? ? ? ? ? var englishGreeter:Class = englishGreeterLoader.getClass("Greeter"); ? ? ? ? ? ? var greeter1 = new spanishGreeter(); ? ? ? ? ? ? var greeter2 = new englishGreeter(); ? ? ? ? ? ?? ? ? ? ? ? ? tf.text = greeter1.greet() + "n" + greeter2.greet(); ? ? ? ? } ? ? } } import flash.display.Loader; import flash.errors.IllegalOperationError; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.net.URLRequest; import flash.system.ApplicationDomain; import flash.system.LoaderContext; class ClassLoader extends EventDispatcher { ? ? public static var CLASS_LOADED:String = "classLoaded"; ? ? public static var LOAD_ERROR:String = "loadError"; ? ? private var loader:Loader; ? ? private var swfLib:String; ? ? private var request:URLRequest; ? ? private var loadedClass:Class; ? ? public function ClassLoader() { ? ? ? ? loader = new Loader(); ? ? ? ? loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler); ? ? ? ? loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler); ? ? ? ? loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler); ? ? } ? ? public function load(lib:String):void { ? ? ? ? swfLib = lib; ? ? ? ? request = new URLRequest(swfLib); ? ? ? ? var context:LoaderContext = new LoaderContext(); // ? ? ? ?context.applicationDomain = ApplicationDomain.currentDomain; ? ? ? ? context.applicationDomain = new ApplicationDomain(); ? ? ? ? loader.load(request,context); ? ? } ? ? public function getClass(className:String):Class { ? ? ? ? try { ? ? ? ? ? ? return loader.contentLoaderInfo.applicationDomain.getDefinition(className) ?as ?Class; ? ? ? ? } catch (e:Error) { ? ? ? ? ? ? throw new IllegalOperationError(className + " definition not found in " + swfLib); ? ? ? ? } ? ? ? ? return null; ? ? } ? ? private function completeHandler(e:Event):void { ? ? ? ? dispatchEvent(new Event(ClassLoader.CLASS_LOADED)); ? ? } ? ? private function ioErrorHandler(e:Event):void { ? ? ? ? dispatchEvent(new Event(ClassLoader.LOAD_ERROR)); ? ? } ? ? private function securityErrorHandler(e:Event):void { ? ? ? ? dispatchEvent(new Event(ClassLoader.LOAD_ERROR)); ? ? } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读