访问* .swf文件中的所有符号

时间:2012-01-11 01:32:19

标签: actionscript-3 flash

有没有办法访问* .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();

1 个答案:

答案 0 :(得分:3)

可以通过读取swf的字节码,对其进行反序列化并读取类名。

虽然这是一项复杂的工作,但最好是寻找已经这样做的低级库。 as3commons字节码类就是这样做的。

http://www.google.com/codesearch#Ueq88nAe-j0/trunk/as3-commons-bytecode/

as3swf也可以获取此数据。你可以看看这些类,看看他们是如何做到的,或者只是使用这些类。

我实际上没有使用它们,所以我没有任何代码可以分享,但希望这有帮助。