AS3中getDefinition和getDefinitionByName之间的区别

时间:2011-07-02 20:29:50

标签: actionscript-3

有人可以解释在AS3中getDefinitionByName和getDefinition之间有什么区别吗?

当我加载外部SWF时,我无法使用getDefinitionByName,因为我收到错误#1065。

但使用externalSWF_ContentLoaderInfo.applicationDomain.getDefinition可以正常工作。

那么,为什么getDefinitionByName找不到className? 我的意思是,如果定义在加载的SWF的applicationDomain中,为什么不在主SWF中呢? (我正在使用Flex)。

Offtopic:我无法创建新标签,因此我无法添加标签getDefinition和getDefinitionByName :(

1 个答案:

答案 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作为加载器上下文的属性传递。