加载外部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 ?属性来测试这一点。
注意:
使用以下代码在“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)); ? ? } }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |