9

有没有办法从 Flash 对象中获取公开函数的列表?例如,您可以通过执行以下命令获取对象中所有方法的列表:

for (var i in object) {
  if (typeof object[i] == "function") {
    console.log(i);
  }
}

唯一的问题是这不会公开通过 ExternalInterfaces API 注册的任何方法。我可以尝试查看该函数是否存在 ( object['method']),它告诉我它是一个函数,但我必须以这种方式猜测每个现有方法。

注意:显然,我无权访问动作脚本。

4

5 回答 5

2

刚刚问了这个问题,似乎有点晚了,但无论如何我都会发布答案;)使用 IE10(Windows 7)它非常适合我列出我的所有方法,如下所示:

var obj = document.getElementById('flashObj');
for(var prop in obj){
  var fx = obj[prop];
  if(obj.hasOwnProperty(prop) && (typeof fx == 'function') && /eval\(instance/.test(fx)){
    console.log(prop)
  }
}

请注意,这在 Chrome 或 Firefox 中不起作用,并且只能使用确切的正则表达式,因为 IE10 不像其他浏览器那样报告“本机代码”。

于 2013-06-17T11:19:30.830 回答
1

问题更严重:在 ActionScript 中这些信息都不可用。您注册了一个新函数,ExternalInterface.addCallback('foo', foo)并且您不能列出已经注册的回调。

于 2010-04-20T21:59:50.260 回答
1

只是一个猜测,但看看它是否有效。所有的 ExternalInterface 函数都应该在全局命名空间中定义。尝试将 SWF 嵌入 HTML 页面,并在页面加载后获取为该页面定义的所有 Javascript 函数。JavaScript中的全局用户定义函数列表?

函数列表应该是在 SWF 文件中定义的函数。

于 2010-04-28T10:35:46.603 回答
0

我想唯一的方法是解析 SWF 文件字节码并尝试收集对ExternalInterface.addCallback方法的调用。

http://www.google.com/search?q=parse+avm2

于 2010-04-27T18:03:39.640 回答
-1

我的直觉是否定的,ExternalInterface 本质上是一个黑匣子,或者说是黑信箱,你把东西戳穿,有时东西又回来了,但你不能打开门看看里面是什么。

如果没有关于 SWF 中公开内容的文档,唯一的其他建议是反编译 swf 以查看源代码。

于 2010-04-15T09:35:21.700 回答