1. 程式人生 > >getDefinitionByName ReferenceError: Error #1065: 變數 未定義 解決辦法

getDefinitionByName ReferenceError: Error #1065: 變數 未定義 解決辦法

從外部載入一個swf資源(1.swf),該swf中有一個匯出類ui.goods.Goods1,載入完成後用getDefinitionByName去取ui.goods.Goods1,老是報異常:ReferenceError: Error #1065: 變數 未定義

public class Test extends Sprite
{
	public function Test()
	{
		var loader:Loader = new Loader();
		loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
		var reqUrl:URLRequest = new URLRequest("1.swf");
		loader.load(reqUrl);
	}
	
	private function completeHandler(e:Event):void
	{
		try{
			var cla:Class = getDefinitionByName("ui.goods.Goods1") as Class;
		}catch(e:Error){
			trace("getDefinitionByName異常", e.message);
		}
	}
}

修改成以下程式碼後正常:

public class Test extends Sprite
{
	public function Test()
	{
		var loader:Loader = new Loader();
		loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
		var reqUrl:URLRequest = new URLRequest("1.swf");
		loader.load(reqUrl, new LoaderContext(true, ApplicationDomain.currentDomain));
	}
	
	private function completeHandler(e:Event):void
	{
		try{
			var cla:Class = getDefinitionByName("ui.goods.Goods1") as Class;
		}catch(e:Error){
			trace("getDefinitionByName異常", e.message);
		}
	}
}
原理:
loader.load(reqUrl, new LoaderContext(true, ApplicationDomain.currentDomain));
把1.swf新增到當前域