从ExternalInterface.addCallback中查找方法名称

时间:2011-05-23 14:11:11

标签: actionscript-3 arguments externalinterface

假设我们有许多ExternalInterface.addCallback函数,如下所示:

ExternalInterface.addCallback( 'foo', handler );
ExternalInterface.addCallback( 'bar', handler );
ExternalInterface.addCallback( 'foobar', handler );

在函数handler中,我想找到通过外部接口调用的方法名称,例如foo, bar or foobar;有办法吗?例如:

private function handler(...args):void
{
     arguments.callee.arguments[ 0 ];
}

但我怀疑这会起作用

2 个答案:

答案 0 :(得分:1)

这应该有效。只需从javascript传递一个标识您的函数的参数,例如一个字符串。因此,当您在javascript代码中调用flash函数时,传递一个字符串,然后在处理函数中进行解析。例如:

动作:

ExternalInterface.addCallback( 'foo', handler );

private function handler(s:String):void
{
     if(s == "foo") {
       //foo specific code
     }
}

的javascript:

document.getElementById('flashObj').foo("foo");

答案 1 :(得分:1)

不完全符合您的要求,但它会为您提供所需的信息 只需创建发送函数名称的第一个参数,或者在这种情况下创建具有funcname属性的对象,以便测试它是否存在。

JAVASCRIPT

 function thisMovie(movieName) {
     if (navigator.appName.indexOf("Microsoft") != -1) {
         return window[movieName];
     } else {
         return document[movieName];
     }
 }
    thisMovie("ExternalInterfaceExample").genericCallBack({ funcname:'foo' })
    thisMovie("ExternalInterfaceExample").genericCallBack({ funcname:'poo' })
    thisMovie("ExternalInterfaceExample").genericCallBack({ funcname:'moo' })

AS3

public function foo( ):void{
  trace('in foo')
}

public function poo( ):void{
  trace('in poo')
}

public function moo( ):void{
  trace('in moo')
}
public function genericCallBack( o:Object ):void{
  trace( 'calling '+o.funcname)
  this[o.funcname]()
}


// add this somewhere in your init process
ExternalInterface.addCallback( 'genericCallBack', genericCallBack );