有没有办法访问* .swf文件中的所有导出符号?
我指的是 Flash IDE 库中标记为导出到Actionscript 的所有符号。这样我就可以使用 getDefinition()类,而无需事先知道符号的名称。
这是在AS3中制作的内部工具,它将在框架上工作,该框架需要对 *。swf 文件的每个符号执行一些操作。
所以性能不是必需的,一个hackish解决方案(访问swf的ByteArray或类似的东西)是有效的。
由于
正如 Daniel 建议的那样,我最终使用as3swf来解析* .swf文件的ByteCode并读取该类。
这是一个简单的函数,它返回一个包含符号名称的数组,准备与 getDefinition()一起使用。您必须传入 *。swf 文件的 ByteArray 。
private function getSymbolList(bytes:ByteArray):Array {
var swf:SWF = new SWF(bytes);
var ret:Array = [];
for each(var tag:ITag in swf.tags) {
if(tag is TagSymbolClass) {
var symbolClass:TagSymbolClass = tag as TagSymbolClass;
for (var i:int = 0; i < symbolClass.symbols.length; i++) {
ret.push(symbolClass.symbols[i].name);
} return ret;
}
} return ret;
}
使用新的 11.3 Flash API ,此功能是内置的。
var definitions:Vector.<String> =
this.loaderInfo.applicationDomain.getQualifiedDefinitionNames();
答案 0 :(得分:3)
可以通过读取swf的字节码,对其进行反序列化并读取类名。
虽然这是一项复杂的工作,但最好是寻找已经这样做的低级库。 as3commons字节码类就是这样做的。
http://www.google.com/codesearch#Ueq88nAe-j0/trunk/as3-commons-bytecode/
as3swf也可以获取此数据。你可以看看这些类,看看他们是如何做到的,或者只是使用这些类。
我实际上没有使用它们,所以我没有任何代码可以分享,但希望这有帮助。