Поиск имени метода из ExternalInterface.addCallback - PullRequest
1 голос
/ 23 мая 2011

Допустим, у нас есть несколько 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 ]

1 голос
/ 23 мая 2011

Не совсем то, что вы просите, но оно даст вам необходимую информацию.
Просто сделайте первый параметр, который вы отправите имя функции или в этом случае объект с атрибутом 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 );
1 голос
/ 23 мая 2011

Это должно работать. Просто передайте параметр, который идентифицирует вашу функцию из JavaScript, например строку. Поэтому, когда вы вызываете flash-функцию в своем коде JavaScript, передайте строку, которую вы затем анализируете в своей функции-обработчике. Например:

ActionScript:

ExternalInterface.addCallback( 'foo', handler );

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

JavaScript:

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