假设我们有许多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 ];
}
但我怀疑这会起作用
答案 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 );