在Javascript中获取ExternalInterface定义

时间:2010-01-12 21:03:11

标签: javascript flash actionscript externalinterface

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

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

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

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

5 个答案:

答案 0 :(得分: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不会像其他浏览器那样报告“本机代码”。

答案 1 :(得分:1)

问题更严重:ActionScript中既没有这些信息。您将新功能注册为ExternalInterface.addCallback('foo', foo),并且无法列出已注册的回调。

答案 2 :(得分:1)

只是一个猜测,但看看它是否有效。应在全局命名空间中定义所有ExternalInterface函数。尝试将SWF嵌入到HTML页面中,并在页面加载后获取为页面定义的所有Javascript函数。 List of global user defined functions in JavaScript?

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:-1)

我的直觉不是,外部接口本质上是一个黑盒子,或者是黑色信箱,你捅东西,有时东西会回来,但是你无法打开门看看里面是什么。

如果没有关于在SWF中暴露的内容的文档,唯一的另一个建议是反编译swf以查看源代码。