package {
import flash.events.EventDispatcher;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.net.URLRequest;
import flash.events.Event;
import flash.system.LoaderContext;
import flash.system.ApplicationDomain;
import flash.events.ProgressEvent;
public class SwfLoader extends Loader {
var flg_play:Boolean;
var func_complete:Function;
private var cont:LoaderContext;
//コンストラクタ
function SwfLoader(url:String,isPlay:Boolean,func_comp:Function = null) {
flg_play = isPlay;
func_complete = func_comp;
//各種イベント定義
this.contentLoaderInfo.addEventListener(Event.INIT,onInit_swf);
this.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded_swf);
this.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoadProgress_swf);
//for URL
var urlReq:URLRequest = new URLRequest(url);
cont = new LoaderContext();
cont.applicationDomain = ApplicationDomain.currentDomain;
this.load( urlReq, cont);
}
//—–Event.INIT
function onInit_swf(evt:Event):void {
//ロード中は再生しないよう停止
var info:LoaderInfo = LoaderInfo(evt.target);
var mc:MovieClip = info.content as MovieClip;
mc.stop();
}
//swf:ロード継続
private function onLoadProgress_swf(e:ProgressEvent):void {
//継続イベント:送信(ProgressEvent.PROGRESSを引き継ぐ)
dispatchEvent(e);
}
//—–Event.COMPLETE
function onLoaded_swf(evt:Event):void {
try {
//指定関数の呼び出し(LoaderInfo.contentを渡す)
var info:LoaderInfo = LoaderInfo(evt.target);
var mc:MovieClip = info.content as MovieClip;
//再生の有無
if (flg_play) {
mc.play();
} else {
mc.stop();
}
if (func_complete != null) {
func_complete(mc);
}
} catch (err:TypeError) {
trace(err.message);
}
}
public function getImage():Loader {
return this;
}
public function checkClass(ClassName:String):Class {
var cl:Class;
//アプリケーションドメインに指定したクラスがあるか
if (cont.applicationDomain.hasDefinition(ClassName)) {
//取得したクラスをClass型変数に代入
cl = cont.applicationDomain.getDefinition(ClassName) as Class;
trace(“外部SWFファイルから”+ClassName+”クラスをインポートしました”);
} else {
trace(“外部SWFファイルには”+ClassName+”クラスは存在しません”);
}
return cl;
}
}
}