14. [junior] ExternalInterface. Обмен данными между JavaScript и Flash

junior – серия статей для начинающих ActionScript-разработчиков.
Все статьи серии:
http://flashpress.ru/blog/category/junior/

JavaScript и Flash очень тесно связаны между собой: начиная от схожего синтаксиса языков, заканчивая тем что внедрение Flash в браузере происходит непосредственно с помощь JavaScript. В крупных WEB-проектах флешки и JS очень плотно связаны обменом данными. Как же происходит передача информации из Flash в JS и обратно? Давайте попробуем в этом разобраться.

Для общения с JS у флеша есть замечательный класс: ExternalInterface. Прежде чем начать работу с JS, во флешке необходимо проверить доступность JS с помощью свойства ExternalInterface.available. Если доступа нет, проверьте наличие параметра allowScriptAccess=always в JS-коде который инициализирует флешку в браузере.

Вызов js-метода из флешки:
Что бы из флеша вызвать метод JavaScript необходимо дернуть метод ExternalInterface.call:

Первым параметром передаем название функции в JavaScript, а дальше через запятую любое количество параметров.

Вызов flash-метода из javaScript:
Что бы JavaScript мог дернуть метод флешки, флешка должна “выдать” соответствующий доступ. Делается это с помощью метода ExternalInterface.addCallback:

Ниже приведен пример флешки работающей с JS на этой странице. После нажатия на кнопку Старт, будет вызван js-метод showMyAlert с параметрами message и time. Строка message будет показана в alert, а time используется для запуска таймера в js. Если таймер запущен, после окончания таймера, js вызовет функцию timerHandler во флешке

Здесь должна быть флешка. Установите Flash Player

Код флешки:

Код JavaScript:

В выше указанном примере во FlashVars передается параметр swfid – это идентификатор флешки в JavaScript, затем этот же id используется в JS для того что бы вызвать метод во флешке. Я не являюсь профи в JavaScript-е, и не смог другим способом определить этот id в JS, поэтому сделал такой вот костыль. Если здесь есть гуру JavaScript-а – скажите как это сделать по другому :)

Ограничения ExternalInterface
Передать из Flash в JS и обратно можно только строковые данные. Если вам необходимо передать объект(Object), его можно преобразовать в XML строку, а после передачи сделать обратную трансформацию в Object. Как из Object получить XML и обратно, читайте здесь.

Да прeбудет с вами Flash.
Serious Sam
Эту статью прочитали 2881 раз

Возникли вопросы по статье? Не стесняйтесь спрашивать в комментариях или любым другим способом на странице Контакты .

Присоединяйтесь к нам в социальных сетях: ВКонтакте , Twitter и Facebook
Понравилась статья? Буду благодарен если вы поделитесь ссылкой с друзьями:


Комментарии ВКонтакте:




Комментарии Facebook:




Комментарии WordPress:


  1. Maxim

    Доброго времени суток!
    Подскажите, пожалуйста, как вставить в swf файл код счётчика на javascript?

    1. Serious Sam Автор записи

      Вставлять в swf код JavaScript это плохая идея. Вам необходимо вставить код в JS, и при необходимости дергать нужную функцию из SWF.