поиск

Интересный ExternalInterface — в гости со своим самоваром

Намусорил: Алексей «Vooparker» Аникутин
В категории: ActionScript 3, Flex 2, Javascript

Не секрет, что для вызова js-функций из Flash/Flex приложений необходимо воспользоваться статичным методом call() класса ExternalInterface. Давайте внимательно посмотрим на сигнатуру этого метода. Согласно ActionScript 3.0 Language and Components Reference она выглядит так:

Actionscript:
  1. public static function call(functionName:String, ... arguments):*

Первым аргумент это строка с именем вызываемой функции, остальные аргументы передаются в вызываемую функцию в качестве параметров. Например, у нас есть js-функция:

Actionscript:
  1. function sayHello ( user )
  2. {
  3.     alert( 'Hello ' + user );
  4. }

Вызов этой функции из ActionScript согласно документации должен быть таким:

Actionscript:
  1. ExternalInterface.call( 'sayHello', 'vooparker' );

И это прекрасно работает. Но можно ли передать вместо имени функции саму функцию? Ответ — можно:

Actionscript:
  1. ExternalInterface.call( 'function (  ) { alert( "Hello!" ) }' );

А как же параметры? Пожалуйста:

Actionscript:
  1. ExternalInterface.call( 'function ( user ) { alert( "Hello " + user ) }', 'vooparker' );

Но я решил пойти еще дальше — попробовать определить js-функцию из ActionScript и затем вызвать ее по имени. Ну что ж и это возможно:

Actionscript:
  1. ExternalInterface.call( 'function (  ) { sayHello = function  ( user ) { alert( "Hello " + user ) } }' );
  2. ExternalInterface.call( 'sayHello', 'vooparker' );

Такой прием срабатывает и с определением переменных тоже. Иными словами, благодаря ExternalInterface вы можете не только вызывать заранее определенные js-функции, но и определять свои. А вот вопрос насколько это разумно делать, вы должны решить для себя сами. Удачи.



Kомментариев - 2 к «Интересный ExternalInterface — в гости со своим самоваром»

Алекс [21 декабря, 2007 в 00:25]

А можно ли из флеша получить переменную заданную в JS??

Юрий Яровой [22 декабря, 2007 в 19:43]

Из AS можно вызвать JS-функцию, которая вернет значение этой переменной:

Actionscript:
  1. var myJSVariableInAS:String = ExternalInterface.call("function(){return myJSVariable;}");

Написать комментарий:

 

Bы можете использовать следующие теги для форматирования: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



User's collector

Внимание!
Эта опция станет доступной только после того как вы авторизуетесь.


 запомнить меня 
Я новый пользователь

На правах рекламы