有没有办法获取当前运行的SWF中包含的所有类的列表?您可以在根上使用describeType,然后遍历列表以查找应用程序中引用的所有实例类,但此方法不适用于已包含但未引用的类(例如,本地引用)。
答案 0 :(得分:14)
从Flash Player 11.3开始,您可以使用ApplicationDomain.getQualifiedDefinitionNames()。
基本示例:
var definitions:Vector.<String> = this.loaderInfo.applicationDomain.getQualifiedDefinitionNames();
以下代码演示了如何在Flash Player 11.3中列出.swf文件的所有定义(包括类),以及旧版Flash Player中的失败消息:
var t:TextField;
t = new TextField();
t.width = 1200;
t.height = 700
t.border = true;
t.background = true;
t.text = "Definition List\n";
t.appendText("========================================\n");
var definitions:*;
if (this.loaderInfo.applicationDomain.hasOwnProperty("getQualifiedDefinitionNames")) {
definitions = this.loaderInfo.applicationDomain["getQualifiedDefinitionNames"]();
for (var i:int = 0; i < definitions.length; i++) {
t.appendText(definitions[i] + "\n");
t.scrollV = t.maxScrollV;
}
} else {
t.appendText("Could not read classes. For a class list, open this .swf "
+ "file in Flash Player 11.3 or higher. Your current "
+ "Flash Player version is: " + Capabilities.version);
}
addChild(t);
对于Flash Player 11.2及更早版本中的类列表,必须读取.swf的字节并手动解析类名。这里有两个着名的图书馆,展示了:
Thibault Imbert的SWFExplorer
http://www.bytearray.org/?p=175
Denis Kolyako的getDefinitionNames()
答案 1 :(得分:1)
另一种选择:
在嵌入式SWF的第一帧中,设置列出您想要提供的所有类的属性。
e.g:
this.availableClasses = ["MainMenuClass", "SmileyFaceClass", "JumpButtonClass"];
然后,在加载时:
var classes:Array = loader.content.availableClasses;
var domain:ApplicationDomain = loader.loaderInfo.applicationDomain;
var classType:Class;
var clip:*;
for each(var className:String in classes) {
classType = domain.getDefinition(className);
clip = new classType();
}
答案 2 :(得分:-1)
据我所知,这是不可能的