Не секрет, что для вызова js-функций из Flash/Flex приложений необходимо воспользоваться статичным методом call() класса ExternalInterface. Давайте внимательно посмотрим на сигнатуру этого метода. Согласно ActionScript 3.0 Language and Components Reference она выглядит так:
-
public static function call(functionName:String, ... arguments):*
Первым аргумент это строка с именем вызываемой функции, остальные аргументы передаются в вызываемую функцию в качестве параметров. Например, у нас есть js-функция:
-
function sayHello ( user )
-
{
-
alert( 'Hello ' + user );
-
}
Вызов этой функции из ActionScript согласно документации должен быть таким:
-
ExternalInterface.call( 'sayHello', 'vooparker' );
И это прекрасно работает. Но можно ли передать вместо имени функции саму функцию? Ответ — можно:
-
ExternalInterface.call( 'function ( ) { alert( "Hello!" ) }' );
А как же параметры? Пожалуйста:
-
ExternalInterface.call( 'function ( user ) { alert( "Hello " + user ) }', 'vooparker' );
Но я решил пойти еще дальше — попробовать определить js-функцию из ActionScript и затем вызвать ее по имени. Ну что ж и это возможно:
-
ExternalInterface.call( 'function ( ) { sayHello = function ( user ) { alert( "Hello " + user ) } }' );
-
ExternalInterface.call( 'sayHello', 'vooparker' );
Такой прием срабатывает и с определением переменных тоже. Иными словами, благодаря ExternalInterface вы можете не только вызывать заранее определенные js-функции, но и определять свои. А вот вопрос насколько это разумно делать, вы должны решить для себя сами. Удачи.
А можно ли из флеша получить переменную заданную в JS??