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

forked from: 外部SWFからのクラス定義の取り出し

fetch class definition from external swf

author: motoki matsumoto
email: mtmotoki(at)gmail.com
// forked from mtok's 外部SWFからのクラス定義の取り出し
/*
fetch class definition from external swf

author: motoki matsumoto
email: mtmotoki(at)gmail.com
*/
package
{
	import flash.text.TextField;
	import flash.display.*;
	import flash.events.*;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;
	import flash.utils.getQualifiedClassName;
	
	[SWF(width="465", height="465", backgroundColor="0x000000", frameRate="24")]
	public class DynamicClassLoading extends MovieClip
	{	
		private var output:TextField;
                private var avatar:Loader;
                private var _textField : TextField = new TextField();

		public function DynamicClassLoading()
		{
			initOutput();
			println('Construct ' + getQualifiedClassName(this));
			addEventListener(Event.ADDED_TO_STAGE, addedToStage);
                        addEventListener(MouseEvent.CLICK, clickHandler);
                   _textField.wordWrap = true;
            _textField.textColor = 0xffffff;
            _textField.border = true;
            _textField.borderColor = 0x888800
            _textField.textColor = 0xffffff;
            _textField.selectable = false;
            _textField.width = 445;
            _textField.height = 100;
            _textField.x = 10;
            _textField.y = 350;
            _textField.text = "";
            addChild(_textField);
		}
		
		public function init():void {
			avatar = new Loader();
			var req:URLRequest = new URLRequest("http://www23.tok2.com/home/ppc/avatar.swf");
			//var req:URLRequest = new URLRequest("http://img.atgames.jp/event/campaign/200904/img/090403_ohanamiCP/01.swf");
			avatar.load(req);
			avatar.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
		}
		
		private function completeHandler(e:Event):void 
		{
                        addChild(avatar);
                        avatar.x = 100;
                        avatar.y = 100;
                        _textField.appendText(avatar.contentLoaderInfo.contentType + "\n");
                        if(avatar.contentLoaderInfo.contentType == "application/x-shockwave-flash")
                        {
                            _textField.appendText("version:" + avatar.contentLoaderInfo.swfVersion.toString() + "\n");
                        }
                        _textField.appendText("hoge");
                        //avatar.content.avatar.sit();                      
		}

                private function clickHandler(event:MouseEvent):void
                 {
                     //avatar.sit();
                 }  
		

		private function addedToStage(e:Event):void 
		{
			removeEventListener(e.type, arguments.callee);
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			init();	
		}
		
		////////////////
		// 出力
		///////////////
		private function initOutput():void {
			var margin:Number = 10;
			
			addChild(output = new TextField());
			output.selectable = false;
			output.multiline = true;
			output.width = stage.stageWidth - margin * 2;	
			output.height = stage.stageHeight - margin * 2;	
		}
		public function print(... args):void {
			output.appendText(args.join(", "));
		}
		public function println(... args):void {
			output.appendText(args.join(", "));
			output.appendText("\n");
		}
	}
}

/*
書いてみたもののあんまり役に立たなそう(笑)
*/
import flash.events.Event;
import flash.events.HTTPStatusEvent;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.events.EventDispatcher;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.ProgressEvent;
import flash.system.LoaderContext;
import flash.net.URLRequest;
import flash.utils.getQualifiedClassName;
import flash.system.ApplicationDomain;
import flash.system.SecurityDomain;
class ClassLoader extends EventDispatcher {
	private var _applicationDomain:ApplicationDomain;
	public function ClassLoader(applicationDomain:ApplicationDomain) {
		if (applicationDomain == null) {
			throw new ArgumentError("applicationDomain is null");
		}
		_applicationDomain = applicationDomain;
	}
	public function loadSWF(req:URLRequest):void {
		var l:Loader = new Loader();
		var context:LoaderContext = new LoaderContext(true, _applicationDomain, SecurityDomain.currentDomain);
		l.load(req, context);
		l.contentLoaderInfo.addEventListener(Event.COMPLETE, redirectEvent);
		l.contentLoaderInfo.addEventListener(Event.OPEN, redirectEvent);
		l.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusEventHandler);
		l.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
		l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
	}
	
	
	private function redirectEvent(e:Event):void {
		var event:Event = new Event(e.type);
		dispatchEvent(event);
		EventDispatcher(e.target).removeEventListener(e.type, arguments.callee);				
	}
	private function httpStatusEventHandler(e:HTTPStatusEvent):void 
	{
		var event:HTTPStatusEvent = new HTTPStatusEvent(e.type, false, false, e.status);
		dispatchEvent(event);
		EventDispatcher(e.target).removeEventListener(e.type, arguments.callee);				
	}
	private function securityErrorHandler(e:SecurityErrorEvent):void 
	{
		var event:SecurityErrorEvent = new SecurityErrorEvent(e.type, false, false, e.text);
		dispatchEvent(event);
		EventDispatcher(e.target).removeEventListener(e.type, arguments.callee);				
	}
	
	private function progressHandler(e:ProgressEvent):void 
	{
		var event:ProgressEvent = new ProgressEvent(e.type, false, false, e.bytesLoaded, e.bytesTotal);
		dispatchEvent(event);
		EventDispatcher(e.target).removeEventListener(e.type, arguments.callee);				
	}

	public function getClass(name:String):Class {
		var cls:Class = _applicationDomain.getDefinition(name) as Class;
		if (cls == null) {
			throw new Error("Can't find class definition");
		}
		return cls;
	}
	public function get applicationDomain():ApplicationDomain {
		return _applicationDomain;
	}
}