將swf編譯進另一swf中,並使用其中的類

通常情況下,第三方庫是以swc形式存在的,這時,直接就能將swc編譯進我們的項目中。

如果第三方提供的不是swc,而是一個swf,通常的做法是用Loader加載這個swf, 然後反射,

以達到用swf中類的目的。


在運行時加載swf, 可以使用第三方提供的類,但有沒有更簡單的方法,在編譯期直接將第三方

的swf直接編譯進我們的項目中,然後直接用呢?當然可以! 代碼如下:

package
{
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.external.ExternalInterface;
	import flash.system.ApplicationDomain;
	
	public class Main extends Sprite
	{
		[Embed(source="Test.swf")]
		private var ClassLib:Class;
		
		public function Main()
		{
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad);
			//可以參考下flex中的mx.core.MovieClipLoaderAsset
			var classLib:* = new ClassLib();
			loader.loadBytes(classLib.movieClipData);
		}
		
		private function onLoad(event:Event):void {
			var loaderInfo:LoaderInfo = event.target as LoaderInfo;
			var appDomain:ApplicationDomain = loaderInfo.applicationDomain;
			var Hello:Class = appDomain.getDefinition("com.test.Hello") as Class; 
			trace("> " + new Hello().say());
			ExternalInterface.call("console.log", "> " + new Hello().say());
		}
	}
}

其中,Test.swf是另一as3項目生成的swf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章