通常情况下,第三方库是以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