当您将一个SWF加载到另一个SWF中时,加载器SWF可以使用ApplicationDomain.getDefinition(name:String)从加载的SWF中获取特定定义。例如:
package
{
// ... imports
public class SWFLoader extends Sprite
{
private var loadedAppDomain:ApplicationDomain;
public function SWFLoader()
{
var request:URLRequest = new URLRequest("test.swf");
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onTestLoadComplete);
loader.load(request);
}
private function onTestLoadComplete(event:Event):void
{
var loaderInfo:LoaderInfo = LoaderInfo(event.target);
loadedAppDomain = loaderInfo.applicationDomain;
// Here we can get ANY defined symbol (class, namespace or function according to Adobe Flash help)
var someSymbolClass:Class = Class(loadedAppDomain.getDefinition("SomeSymbol"));
var someSymbolSprite:Sprite = Sprite(new someSymbolClass());
addChild(sprite);
}
}
}如何才能获得SWF中的所有定义,而不显式地指定每个定义?
发布于 2012-10-24 00:54:21
从Flash player11.3开始,您可以使用ApplicationDomain.getQualifiedDefinitionNames()。
参见the official documentation for the method和this blog post about the Flash Player release。
发布于 2010-11-10 20:40:39
EDIT:这是解决问题的最快方法:http://www.bytearray.org/?p=175
嗨,你可以使用这个库:https://github.com/claus/as3swf/wiki/没有时间做更深入的测试,但这是我发现的:
1-我已经创建了一个在库中包含2个导出的MC、$Test和$Test2的.swf 2-一旦加载程序加载了.swf,我就运行以下代码:
var swf : SWF = new SWF(loader.contentLoaderInfo.bytes);
trace(swf);3-在输出中,你会注意到以下几行:
[76:SymbolClass]
Symbols:
[0] TagID: 2, Name: $Test2
[1] TagID: 1, Name: $Test我认为有一种方法可以直接通过库API获取此信息
发布于 2010-11-10 20:27:48
您必须将加载的SWF放入当前的ApplicationDomain中。
在ContextLoader信息中,使用ApplicationDomain.currentDomain可以做到这一点。
loader.load(request, new ContextLoader(false, ApplicationDomain.currentDomain));应该能行得通。
https://stackoverflow.com/questions/4144270
复制相似问题