Опубликован: 23.12.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский физико-технический институт
Лекция 14:

Работа флэш-программ в Internet

Передача параметров флэш-ролику из HTML

Рассмотрим еще один способ настройки флэш-ролика извне.

Этот способ немного похож на использование ini-файлов, но имеет совершенно другую природу.

Заключается он в использовании возможности передачи параметров встраиваемому объекту (plugin или ActiveX) из HTML-кода, создающего plugin- или ActiveX-объект (затем эти переменные будут доступны как переменные _level0 ).

Существует два синтаксиса передачи параметров флэш-ролику:

  • Запись параметров в url-формате ( param=value&param=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.

алексеи федорович
алексеи федорович
Беларусь, рогачёв
Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009