有人可以解释在AS3中getDefinitionByName和getDefinition之间有什么区别吗?
当我加载外部SWF时,我无法使用getDefinitionByName
,因为我收到错误#1065。
但使用externalSWF_ContentLoaderInfo.applicationDomain.getDefinition
可以正常工作。
那么,为什么getDefinitionByName找不到className? 我的意思是,如果定义在加载的SWF的applicationDomain中,为什么不在主SWF中呢? (我正在使用Flex)。
Offtopic:我无法创建新标签,因此我无法添加标签getDefinition和getDefinitionByName :(
答案 0 :(得分:6)
getDefinition 是ApplicationDomain的方法,它返回类,命名空间或函数的定义。
getDefinitionByName 是来自flash.utils的包级函数,它返回一个可用于实例化新对象的Class对象。该定义必须已加载到ApplicationDomain中的某个位置。
您无法使用外部SWF生成getDefinitionByName的原因是它被加载到单独的ApplicationDomain中。您的第二个示例有效,因为您的目标是正确的ApplicationDomain。要使您的第一个示例正常工作,您必须将外部SWF加载到当前的ApplicationDomain中,如下所示:
var request:URLRequest = new URLRequest("externalSWF.swf");
var context:LoaderContext = new LoaderContext();
context.applicationDomain = ApplicationDomain.currentDomain;
var loader:Loader = new Loader();
loader.load(request,context);
这是有效的,因为它将当前的ApplicationDomain作为加载器上下文的属性传递。