In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

ClassLoader

load classes from other codes in wonderfl
http://wonderfl.net/code/585fe2c7e3ac3f0c2927a33e3b7a71ac8429ea3f
http://livedocs.adobe.com/flex/3_jp/langref/flash/system/ApplicationDomain.html
according to livedocs license: http://creativecommons.org/licenses/by-nc-sa/3.0/
// load classes from other codes in wonderfl
// http://wonderfl.net/code/585fe2c7e3ac3f0c2927a33e3b7a71ac8429ea3f
// http://livedocs.adobe.com/flex/3_jp/langref/flash/system/ApplicationDomain.html
// according to livedocs license: http://creativecommons.org/licenses/by-nc-sa/3.0/
package {
    import flash.display.*;
    import flash.errors.IllegalOperationError;
    import flash.events.Event;
    import flash.text.TextField;

    public class ApplicationDomainExample extends Sprite {
        private var loader:ClassLoader;
        
        public function ApplicationDomainExample() {
            loader = new ClassLoader();
            loader.addEventListener(ClassLoader.LOAD_ERROR, loadErrorHandler);
            loader.addEventListener(ClassLoader.CLASS_LOADED, classLoadedHandler);
            loader.load("http://swf.wonderfl.net/swf/usercode/5/58/585f/585fe2c7e3ac3f0c2927a33e3b7a71ac8429ea3f.swf");
        }
        
        private function loadErrorHandler(e:Event):void {
            throw new IllegalOperationError("Cannot load the specified file.");
        }
        
        private function classLoadedHandler(e:Event):void {
            var greeterClassRef:Class = loader.getClass("RuntimeClasses");
            var greeter:Object = new greeterClassRef();
            trace(greeter.greet()); // Hello World
            
            var tf:TextField = new TextField;
            tf.text = greeter.greet();
            addChild( tf );
            
            var bd  :BitmapData = greeter.square();
            var bmp :Bitmap = new Bitmap( bd );
            bmp.x = 100;
            bmp.y = 100;
            
            addChild( bmp );
        }
    }
}

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;
        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));
    }
}