Беларусь, рогачёв |
Работа флэш-программ в Internet
Передача параметров флэш-ролику из HTML
Рассмотрим еще один способ настройки флэш-ролика извне.
Этот способ немного похож на использование ini-файлов, но имеет совершенно другую природу.
Заключается он в использовании возможности передачи параметров встраиваемому объекту (plugin или ActiveX) из HTML-кода, создающего plugin- или ActiveX-объект (затем эти переменные будут доступны как переменные _level0 ).
Существует два синтаксиса передачи параметров флэш-ролику:
-
Запись параметров в url-формате ( param=value¶m=value ) в параметре movie тегов <OBJECT> и <EMBED> через ' ?'. Например:
<param name=movie value ="myflash.swf?par1=value1&par2=value2">.
У этого способа есть один недостаток: он не работает с версией флэш-плеера 6.0.47.0.
-
Запись параметров в url-формате в отдельном специальном параметре FlashVars теги <OBJECT> и <EMBED>. Например:
<param name=movie value="myflash.swf"> <param name= FlashVars value="par1=value&par2=value2">
Этот способ не работает в версиях плейера раньше 6.0.
Рекомендуем использовать оба способа одновременно, если ваши флэш-ролики предполагается проигрывать на флэш-плеерах версий 5.0 и более старых. В остальных случаях используйте второй способ.
Отметим, что передачей параметров флэш-ролику из HTML зачастую пользоваться удобнее, чем ini-файлами, потому что не возникает проблем с асинхронностью: сразу после загрузки ролика все параметры доступны как переменные _level0.
Взаимодействие с браузером
В предыдущем параграфе мы рассмотрели самый простой вид взаимодействия браузера и флэш-плеера: передачу параметров из первого последнему.
Но это далеко не единственный тип взаимодействия, который можно использовать. Вы можете управлять роликом (например, запускать и останавливать ролик, получать и устанавливать значения переменных ролика) из JavaScript (или VBScript), и наоборот - вызывать функции JavaScript или VBScript из флэш-ролика.
Рассмотрим данные механизмы более подробно.
Управление роликом из JavaScript
Синтаксис JavaScript -команды, обращающейся к ролику, таков:
movie.methodName (parameters);
Здесь movie - ссылка на plugin - или ActiveX -объект флэш-плеера, то есть window.document.<имя ролика>, где <имя ролика> - это параметр ID для тега OBJECT и параметр NAME для тега EMBED, methodName - имя одного из методов plugin - или ActiveX -объекта флэш-плеера (далее будем называть их флэш-методами, о них см. далее).
Перечислим самые полезные флэш-методы, полный их перечень можно посмотреть, например, здесь: http://www.macromedia.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html.
Получение значения переменной: GetVariable(varName)
Пример:
var radioButtonValue = movie.GetVariable("/Form/RadioButton:Value");
Установка значений переменной:
SetVariable(variableName, value)
Пример:
movie.SetVariable("textField.variableName, text", "someText");
Запуск проигрывания: Play()
Пример:
movie.Play();
Остановка проигрывания: StopPlay()
Пример:
movie.Stop();
Перевод ролика на нужный кадр: GotoFrame(frameNumber)
Пример:
movie.GotoFrame (_root, 5);
Выполнение кода из кадра клипа. Можно использовать для вызова метода, если поместить вызов метода в этот кадр.
TCallFrame(object, frameNumber)
Пример:
movie.TCallFrame("myMovieClip", 10);
Вызов методов JavaScript и VBScript из флэш-ролика
Рассмотрим теперь, как можно добиться обратного эффекта - вызвать функцию JavaScript или VBScript из флэш-ролика.
Для всех внешних вызовов из флэш-ролика предназначен метод fscommand (другие его применения мы рассмотрим в следующем параграфе).
Синтаксис инструкции fscommand :
fscommand (command, arguments);
Если флэш-ролик выполняется в браузере, то этот метод приводит к вызову одной из функций: VBScript-функции <movieName>_FSCommand (эта функция, например, вызывается в Internet Explorer для Windows) или JavaScript -функции <movieName>_DoFSCommand (эта функция, например, вызывается в Netscape). Так все хитро устроено внутри браузеров, а точнее, внутри подключаемых ( plug-in ) модулей или объектов ActiveX, которые выполняют функции флэш-плееров в браузерах - именно плеер вызывает у браузера одну из вышеуказанных функций.
Какая бы из этих двух функций ни была вызвана, ей в качестве первого аргумента передается сommand, а в качестве второго - arguments (это два параметра, указаннные при вызове fscommand ).
Давайте разберемся, как этим пользоваться. Скорее всего, вы хотите добиться одинакового поведения во всех браузерах. Тогда нужно сделать, чтобы в любом случае вызывалась одна функция. Для этого просто продублируем входной интерфейс. Вот как, например, это можно сделать:
<SCRIPT Language=JavaScript> function mymovie_DoFSCommand (cmd, args) { // эта функция вызывается в результате выполнения fscommand // в Netscape //... } </SCRIPT> <SCRIPT Language=VBScript> Sub mymovie_FSCommand (ByVal cmd, ByVal args) call mymovie_DoFSCommand (cmd, args); End Sub </SCRIPT>
Есть и другой вариант, не связанный с помещением нужного вам JavaScript или VBScript-кода в html-документ. Вы можете просто воспользоваться инструкцией getURL, а в качестве адреса передать строчку наподобие " javascript: alert('Text of Alert') ". Собственно говоря, после префикса javascript: может идти довольно большое количество операторов (разделенных двоеточиями, разумеется). Правда, отладка ролика, содержащего подобный вызов во встроенном редакторе будет неудобна - все время будет запускаться браузер для того, чтобы выполнить заданную команду. Использование fscommand не имеет такого побочного эффекта.
Следует заметить, что описанные выше взаимодействия флэш-ролика с браузером через JavaScript работают не на всех платформах (в частности, они не работают в Internet Explorer под MacOS, а также в Mozilla). Это может быть очень неудобно, например, когда нужно организовать взаимодействие двух флэш-роликов, флэш-роликов и апплетов и пр. В таких случаях можно рассматривать альтернативные варианты:
- LocalConnection (если речь идет о взаимодействии двух флэш-роликов)
- Организация коммуникаций через веб-сервер;
- Перезагрузка флэш-роликов в отдельных фреймах из JavaScript с передачей им нужных параметров (теги <OBJECT> и <EMBED> полностью генерируется с помощью JavaScript ;
Первый и второй варианты мы отчасти рассмотрим далее в этой лекции.
Другие применения fscommand
С помощью fscommand можно не только вызывать методы JavaScript, как мы уже говорили. Например, с ее помощью можно командовать консольным плеером. То же самое справедливо для ролика, выполняемого как projector (опубликованного в exe-файл, внутрь которого встроен плеер).
Вот как это делается:
fscommand ("showmenu", false);
В результате пропадет линейка меню плеера, а контекстное меню будет сильно уменьшено.
Можно также запустить какое-либо приложение Windows.
fscommand ("exec", "calc.exe");
Как нетрудно догадаться, эта команда запустит калькулятор Windows. Впрочем, настройки безопасности системы могут не позволить такого сделать (не говоря уже о том, что из браузера ничего подобного устроить нельзя).
Наконец, если вы работаете не только с Macromedia Flash MX, но и с Macromedia Director (в фильмы которого можно встраивать флэш-ролики), то fscommand может применяться для того, чтобы отдавать команды Shockwave-плееру (проигрывающему фильмы Macromedia Director) на языке Lingo. За подробностями вам следует обратиться к документации по системе Macromedia Director.