03 сентября 2012

встраивание компонентов в HTML-страницы

снова обращаюсь к книжке по ActionScript2.0 Дмитрия Гурского "Программирование во Flash MX 2004". часть информации несколько устарела или скоро устареет, но я нашла для себя много полезного. плюс легкий и доступный неспециалистам вроде меня язык.
главу помещаю без изменений и сокращений, хотя, возможно, и стоило сделать выжимку... но мне кажется правильным оставить немного истории - для пущего понимания :)

темы поста:
  • помещение компонентов в HTML-страницы
  • передачи внешних данных во Flash-ролик 
  • два способа передачи параметров


16.5.1. Теги <EMBED> и <OBJECT> 
Мы можем публиковать SWF-фильмы как компоненты HTML-страниц благодаря тому, что браузеры могут включать внешние исполнимые модули.  Во времена  «войны браузеров»  середины 1990-х годов компании Microsoft и Netscape пошли разными путями в реализации этой возможности. Microsoft разработала знаменитую технологию ActiveX, позволяющую при соблюдении ряда условий динамически включить в браузер исполнимое приложение. Netscape избрала более стандартный, но и более безопасный путь, просто введя поддержку плагинов. Не вдаваясь в подробности, отметим, что для пользователя в случае Flash разница между этими технологиями заключается в том, как происходит установка плейера. Если Internet Explorer обнаруживает, что страница содержит SWF-фильм, для которого в системе нет проигрывателя, то он выводит панель с предложением импортировать Flash-плейер с сайта компании Macromedia. Если пользователь соглашается, то установка приложения осуществляется прямо в процессе просмотра страницы и не требует
перезапуска браузера.  В случае же Netscape Navigator  все происходит по-иному.  Пользователь должен самостоятельно скачать и установить плейер. После этого браузер должен быть перезапущен. 

Для встраивания компонентов, использующих технологию ActiveX, Microsoft  добавила в HTML тег <OBJECT>.  Соответственно,  для своей технологии плагинов Netscape  придумала тег<EMBED>. 
К концу 1990-х годов HTML был полностью стандартизирован. Единообразия ради тег <EMBED>  был исключен из стандарта. Встраивание внешних компонентов было полностью возложено на тег <OBJECT>. На данном этапе его поддерживают все современные браузеры. Тег же <EMBED> нее больше уходит в историю. 

Тег <OBJECT> впервые начал поддерживаться еще Microsoft Internet Explorer 3.0. тег <EMBED> появился во времена Netscape Navigator 2.0. Где-то до 1999 года они существовали параллельно, после чего <EMBED> начал сдавать позиции. В принципе, сейчас можно довольно смело публиковать SWF-фильм, используя только тег <OBJECT>. Однако если вы хотите, чтобы содержимое вашего сайта было доступно абсолютно всем посетителям,  теги <OBJECT>  и <EMBED>  нужно использовать совместно. Тег <EMBED> вкладывается в <OBJECT>. Если браузер не сможет распознать тег <OBJECT>,  он просмотрит его содержимое и,  обнаружив тег <EMBED>,  выполнит прописанные в нем инструкции. Если же браузер достаточно современный, чтобы поддерживать
тег <OBJECT>, то <EMBED> будет попросту проигнорирован.

Типичный HTML-код,  используемый для публикации SWF-фильмов,  может быть сгенерирован Flash автоматически. Для этого нужно поставить флажок HTML на закладке Formats окна Publish Settings и нажать кнопку Publish. В результате будет создан приблизительно следующий код (приведем лишь ту его часть, которая непосредственно отвечает за публикацию фильма): 

<object 
Classid="clsid:d27cdb6e-ae6d-llcf-96b8-444553540000" 
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash. 
cab#version=7,0,0,0" 
width="550" height="400" id="mov.swf" align="middle"> 
<param name="allowScriptAccess" value="sameDomain"/> 
<param name="movie" value="mov.swf"/> 
<param narae="quality" value="high"/> 
<param name="bgcolor" value="#ffffff"/> 
<embed  src="mov.swf"   quality="high"   bgcolor="#ffffff"   width="550" 
heights"400"   name="mov"  align="middle"  allowScriptAccess="sameDomain" 
type="application/x-shockwave-flash" 
pluginspage="http://www.macromedia.com/go/getflashplayer"/> 
</object> 

Проанализировав приведенный HTML-код, обнаружим, что теги <OBJECT> и <EMBED> имеютпрактически одинаковый набор параметров и атрибутов.  Назначение большинства из них легко понять из их названия. Например, очевидно, что атрибут width должен отвечать за ширину области отображения фильма, атрибут align — за выравнивание фильма на странице, а параметр quality — за качество визуализации фильма. Большинство атрибутов и параметров чаще всего имеют одно и то же значение для большинства публикуемых фильмов. К примеру, если фильмы размещаются на одной и той же странице, то HTML-код для одного из них можно создать, просто скопировав теги <OBJECT>  и <EMBED>  другого.  Затем придется заменить значения всего четырех элементов: 
• ширина и высота фильма обычно индивидуальны, поэтому изменяем значение атрибутов width и height; 
• адрес и имя публикуемого SWF-фильма будут, естественно, другими. Поэтому заменяем величину параметра movie  и атрибута id  тега <OBJECT>,  а также значение атрибута src  тега <EMBED>. 

То, что HTML-код, отвечающий за встраивание SWF-фильмов, обычно столь мало различается у разных фильмов, заставляет задуматься, зачем вообще задавать параметры и атрибуты,  которые практически всегда имеют одно и тоже значение. Также можно долго спорить и о том, стоит ли вообще прописывать тег <EMBED>, если браузер, не поддерживающий <OBJECT>, — это архаизм, который не так уж и просто найти. Вывод же можно сделать один: HTML-код, генерируемый Flash, избыточный. Более того, ввиду наличия в нем тега <HMBED> он даже не соответствует современным стандартам.  Если использовать установки по умолчанию,  то SWF-фильм можно встроить более коротким кодом: 

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550"  
height="400"> 
<param name="movie" value="mov.swf"/> 
</object> 

Приведенный код будет хорошо работать только в браузерах от Microsoft. Если же необходимо учесть к тому же браузеры Netscape  и Opera (доля которых,  надо признать,  довольно мала),  то вместо атрибута classid следует использовать атрибут type (в нем указывается МIМЕ-тип встраиваемого файла): 

<object type="application/x-shockwave-flash" width="550" height="400"> 
<param name="movie" value="mov.swf"/> 
</object> 

По своей эффективности данный код аналогичен генерируемому Flash, если не считать редких ситуаций, когда страница открывается очень старым браузером или в системе нет Flash-плейера. На практике вполне допустимо его использовать, добавляя лишь те атрибуты или параметры, значения которых для публикуемого фильма должны отличаться от принятых по умолчанию. 
Если у пользователя не окажется плейера нужной версии или использование технологии ActiveX браузером запрещено, то SWF-фильм, естественно, не отобразится. Чтобы учесть подобные ситуации, вы должны разработать альтернативное содержимое, которое будет визуализировано на месте фильма. Описывающий его HTML-код должен быть помешен в тег <OBJECT>. Обычно альтернативное содержимое 1редставляет собой информационное сообщение (вроде «скачав Flash-плейер, вы видите замечательную заставку»)  или ссылку, заменяющую баннер или кнопку.  В случае тега <EMBED> для задания альтернативного содержимого используется атрибут alt. 
Общее количество атрибутов и параметров тегов <OBJECT>  и <EMBED>  весьма значительное. Другой вопрос, что все вместе они никогда не прописываются. Всего лишь несколько атрибутов являются обязательными. Остальные задаются лишь в том случае, если их величина должна быть отлична от значения по умолчанию. 
Вообще все параметры и атрибуты можно разделить на две группы. 
  • В первую входят те из них, которые хранят информацию,  использующуюся браузером.  Это,  например,  расположение SWF-файла, ширина и высота области, которую нужно отвести под фильм, идентификационный номерFlash-плейера и т. д.
  • Вторую группу образуют параметры и атрибуты, хранящие данные, которые передаются плейеру. К примеру, так плейер «узнает», должен ли быть фон прозрачным, следует ли использовать системные шрифты, должен ли фильм проигрываться в цикле. Атрибутов первой группы около 20. Но в случае Flash-фильмов используются не все из них. Информацию о наиболее часто применяемых атрибутах вы можете получить из табл. 16.2. 












































Ко второй группе относится несколько больше атрибутов и параметров, чем к первой. По сути они представляют собой внешние переменные, которые передаются плейеру перед началом проигрывания фильма. Будет ли такая переменная иметь форму атрибута или параметра, зависит от тега. Вслучае тега <EMBED> переменные с настройками задаются в форме атрибутов (то есть они поме-шаются непосредственно в тег). Если же прописывается тег <OBJECT>, то переменные с даннымидля плейера должны быть заданы как параметры. Для этого служит специальный тег <PARAM>. Уэтого тега имеется два атрибута: name — имя параметра и value — его значение.
Например, чтобысделать задний фон прозрачным, следует набрать

<param name="wmode" value="Transparent"/> 

Большинство атрибутов и параметров второй группы мы подробно рассмотрели,  когда изучали настройки, за которые они отвечают. Поэтому сейчас ограничимся лишь краткой их характеристикой (табл. 16.3).
















Если HTML-страница с фильмом публикуется из среды разработки Flash, то задать значения практически для всех атрибутов можно, соответствующим образом определив настройки на закладке HTML окна Publish Settings. Впрочем, HTML-код,  генерируемый по умолчанию, избыточен. Так что стоит разработать собственный шаблон публикации.  Как это сделать,  весьма обстоятельно описывается в справочной системе программы. 


16.5.2. Передача данных из HTML-окружения при загрузке фильма
Существует много способов передачи внешних данных во Flash-фильм. Выбор подхода должен определяться типом этих данных, их расположением, а также тем, когда они должны поступить в фильм. В простейшем случае данные являются текстом, хранящимся на той же НТМL-странице, импортировать который необходимо перед началом воспроизведения фильма. Оптимальный способ передачи данных такого рода связан с применением специального параметра flashvars  тега <OBJECT> (или атрибута тега <EMBED>). 
Значением тега flashvars должна быть строка, содержащая передаваемые данные в виде нужного количества пар имя-значение, разделенных амперсантом (&).
Например, если вам необходимо переслать в фильм имя посетителя, его возраст и страну проживания, то следует набрать

<param name="flashvars" value="name=Bob&age=25&location=USA"/> (тег <OBJECT>) 
flashvars="name=Bob&age=25&location=USA"     (тег <EMBED>) 

Пары имя-значение принято называть переменными. При поступлении строки с такими переменными в фильм, на их основании будут созданы настоящие переменные ActionScript и помещены на основную временную диаграмму.
Например,  проанализировав приведенный выше HTML-код, 
плейер создаст три переменные: name, age и location, которые будут хранить строки «Bob», «25» и «USA». Естественно, что переменные, получаемые от HTML-окружения, должны иметь уникальные идентификаторы.  Иначе они будут утеряны или перезаписаны при выполнении кода ActionScript. 
Используя параметр (атрибут) flashvars, в фильм можно передать до 64 Кб данных. 

В строке, присваиваемой параметру (атрибуту) flashvars, нельзя использовать пробел, некоторые знаки пунктуации (являющиеся в НТМL зарезервированными), например «<» или <« %», служебные и непечатаемые символы. Более того, если страница закодирована не в Unicode, нельзя применять символы кириллицы или любого другого национального языка. Строка может содержать только буквы из кодировки US-ASCII (первые 128 символов Unicode и большинства восьмибитовых кодировок). Для обозначения остальных символов используется запись вида %ХХ, где XX — код символа в шестнадцатеричном представлении. Например, чтобы задать пробел, нужно ввести %20, а для наклонной черты — %2F. Если используется кодировка Unicode, то символы, код которых больше 255, задаются записью %ХХ %YY. К примеру, кирилличная «а» запишется как %D0 %B0.  Одиночный пробел можно задать символом «+».  Подобные правила были выработаны нараннем этапе развития Интернета для однозначности трактовки URL на разных машинах. Поэтому о строке, записанной исходя из них, говорят, что она подверглась URL-кодированию
Вы должны строго следовать правилам URL-кодирования, задавая значение параметра (атрибута)  flashvars, иначе плейер не сможет верно интерпретировать строку с парами имя-значение. Также нужно помнить, что Flash-плейер по умолчанию использует Unicode. Это означает, что все символы, не входящие в US-ASCII, должны быть закодированы в формате Unicode (HTML-страницы до сих пор чаще всего кодируются в одной из восьмибитовых кодировок). 
Например, посмотрим, как плейер трактует следующую строку с данными: 

<раram name="flashvars" value="text=Bceм привет!"/> 

Попробуем трассировать значение переменной text,  которая должна быть создана на основной временной диаграмме фильма: 

trace(text); // Выводит: 6ЯЕЛ ОПХБЕР! 

Увидев подобную строку в браузере, вы, вероятно, попытались бы изменить кодировку. Но в нашем случае такая операция бессмысленна. Чтобы текст отобразился верно, его нужно подвергнуть URL-кодированию; 

<param name="flashvars" value= "text=%D0%92%Dl%81%D0%B5%D0%BC%20%D0%BF%D1%80%DO%B8%DO%B2%DO%B5%D1%82%21"/> 

Проверяем значение переменной: 
trace(text); // Выводит: Всем привет! 

На практике URL-кодирование редко проводится «вручную», В любой среде разработки, хотя бы чуть более совершенной,  чем  «Блокнот»,  для этого имеются специальные инструменты.  В ActionScript и JavaScript провести URL-кодирование позволяет функция escape()

trace(escape("Привет")); // Выводит: %DO%9F%D1%30%DO%B8%DO%32%DO%B5%D1%82 

При необходимости строку можно и декодировать, для чего предназначена функция unescape()
trace(unescaper("%D0%9F*D1%80%D0%B8%D0%B2%D0%B5%D1%82"); // Выводит: Привет

Еще один способ передать фильму данные из HTML-окружения заключается в использовании метода GET. При таком подходе переменные передаются в виде части URL, исходя из которого происходит импортирование фильма. Строка с переменными отделяется от основного URL символом «?». 
Как вы помните, в случае тега <OBJECT> указатель на SWF-файл хранит параметр movie, Следовательно, чтобы передать данные при помощи метода GET, нужно набрать приблизительно следующий код: 

<param name="movie" value="mov.swf?name=Bob&age=25&location=USA"/> 

В теге <EMBED> за расположение SWF-файла отвечает атрибут src: 
src="mov.swf?name=Bob&age=25&location=USA" 

Строка с парами имя-значение,  полученная плейером при помощи метода GET,  обрабатывается точно так же, как и в случае использования для ее передачи параметра (атрибута) flashvars. Однако метод GET  в силу своей природы имеет существенно больше ограничений для импортирования данных, чем flashvars:
  •  Во-первых, метод GET не позволяет переслать более 256 байтов информации (предел flashvars —64 Кб текста).
  • Во-вторых, что более существенно, при присоединении к URL новых параметров браузер будет считать,  что это ссылка на новый ресурс. Поэтому методGET  снижает эффективность применения кэшированных файлов,  что в случае  «тяжеловесных» Flash-сайтов крайне плохо. 
Кстати,  метод GET  можно использовать для передачи параметров,  если фильм импортируется функцией load.Movie() или loadMovieNum(). Это может быть полезно, если инициализация должна зависеть от контекста. 

























взаимодействие ActionScript2.0 и JavaScript

вызов функции JS из ActionScript  - коротенький урок на английском.

важно: при тестировании флешки (уже помещенной на html страничку) , из к-рой вызывается функция, в GoogleChrome, возникли проблемы: нифига она не вызывалась. и так, и эдак, и я перекопала интернет... решила проверить в других браузерах. Firefox и Explorer сообщили о необходимости изменить настройки секьюрити для получения возможности тестирования флешки. изменила в фаерфоксе. заработали фаерфокс и эксплорер. хром продолжаем молча игнорировать.
посмотрим, что даст проверка на сервере. хочется верить...

далее текст скопирован из книжки по ActionScript2.0 Дмитрия Гурского. легко и понятно .
глава:
16.5.4. Передача команд браузеру. Функция getURL() 
Функция getURL() — одна из наиболее давно разработанных и, несмотря на это, важных для практики функций ActionScript. Она начала поддерживаться еще во Flash 2, то есть задолго до того, как в оборот был введен сам термин «ActionScript». Во Flash 5 у нее появился дублирующий метод класса MovieClip.

Функция getURL()  служит для решения довольно большого количества задач,
которые можно охарактеризовать как «взаимодействие с локальным окружением». Она позволяет отправлять команды браузеру,  фильму Macromedia Director,  операционной системе —  в общем средам,  которые окружают плейер,  воспроизводящий фильм  (в англоязычной литературе такие среды принято называть host environment).  Однако для практики интерес представляют прежде всего возможности getURL() no взаимодействию с браузером. При помощи данной функции можно открыть новую HTML-страницу, отправить вызов программе электронной почты, скачать удаленный файл, задействовать любую команду JavaScript или VBScript, т. е. решить любую задачу, доступную браузеру.

В наиболее общем случае синтаксис функции getURL() следующий:
getURL("URL");
Здесь url — некая ссылка, представленная в формате, который принят в Сети для задания URL. Ее общий синтаксис: «scheme:scheme_specific_part», где:
scheme (схема) -  описывает тип взаимодействия с внешней системой,  особенности которого детализируются в части scheme_specific_part URL. Это может быть некий реальный протокол (hup, ftp, https) или псевдопротокол (javascript, mailto, file, asfunction).
Ссылки с псевдопротоколами (их еще называют псевдонимами URL) предназначены для непосредственного управления системами локального окружения и не приводят к импорту данных извне  (например, псевдопротокол javascript позволяет отправить браузеру команду JavaScript). Ссылка с протоколом вызовет импорт некоторых внешних данных (обычно это HTML-страницы);
scheme_specific_part -  часть URL,  настолько специфичная для каждого типа взаимодействия, что однозначно ее определить невозможно. Это может быть адрес документа или файла (http, ftp), код JavaScript (javascript), имя функции ActionScript (asfunction), адрес E-mail и информация для полей письма (mailto) и т. д.

У функции getURL()  иногда может быть несколько параметров.  Подробнее об этом поговорим, когда будем обсуждать соответствующие случаи.
Функция getURL() может использоваться и кодом фильма, проигрываемого в автономном плейере. При этом любая команда, связанная с взаимодействием с браузером, вызовет открытие его нового окна с последующим выполнением в нем этой команды.

В табл. 16.4 приведена краткая характеристика основных команд, поддерживаемых функцией get URL(). Те из них, которые представляют для практики наибольший интерес, будут рассмотрены нами более обстоятельно ниже.

Все протоколы и псевдопротоколы, поддерживаемые функцией getURL(), могут быть использова- ны и при создании ссылок в тексте при помощи тега <А>.
Например, при нажатии ссылки, создаваемой следующим кодом, появится информационная панель браузера со строкой «Привет»:
this.createTextField("pole",0,200,200,0,0);
pole.border=pole.html=pole.autoSize=true;
pale.htmlText="Щeлкнитe по этой <B><A HREF='javascript:alert (\"Привет\")'>
ссылке </A></B>";
Подробно особенности использования тега <А> описаны в главе J3.

Загрузка HTML-страницы
Основа Всемирной паутины — гиперссылки. Именно они связывают Сеть в единое целое, без них она бы представляла собой просто огромный архив неотсортированных документов. Вряд ли можно найти сайт, на котором не было бы хотя бы одной гиперссылки.

Главная задача, для решения которой применяется функция getURL(), связана с реализацией разнообразных гиперссылок. Простейший случай — это баннер, при щелчке по которому должна быть открыта определенная страница.
Если необходимо открыть новую HTML-страницу, то функцию getURL() следует использовать в следующей форме:
getURL("URL", window);
где:
"url" —  строка с абсолютной или относительной ссылкой на НТМ L-документ. Для его дос-
тавки может быть использован как протокол http, так и https. Указывать протокол обязательно(в браузере по умолчанию применяется http, поэтому если URL  вводится в адресную строку, можно не прописывать протокол);
window — необязательный параметр, определяющий,  где именно будет отображена загружаемая HTML-страница. Возможны следующие варианты window:
    o _blank —  документ будет открыт в новом окне браузера. Характеристики этого окна
будут соответствовать настройкам по умолчанию. Как открыть документ в окне с опре-
деленными свойствами,  покажем чуть ниже,  когда изучим взаимодействие SWF-
фильма с JavaScript. Например:
getURL("http://wnk.biz", _blank);
    o _self —  документ будет открыт в том же окне или фрейме,  где располагается HTML-
страница с фильмом. Значение по умолчанию;
    o _parent — загружаемый документ заместит содержимое всех фреймов того же уровня,
что и фрейм, к которому относится HTML-страница с фильмом. Если фильм отобража-
ется в окне или фрейме верхнего уровня (а так обычно и бывает), то значения «_parent»
и «_self» эквивалентны;
    o _top — новая HTML-страница заместит собой все содержимое того окна браузера,  к
которому относится Flash-фильм, давший команду загрузить эту страницу. Если фильм
принадлежит непосредственно окну,  а не фрейму,  то разницы между значениями
window «_parent», «_self», «_top» не существует;
    o name — новый документ будет загружен в окно или фрейм с именем «name». Если окна или фрейма с таким именем нет,  то браузер откроет новое окно,  присвоит ему имя
«name» и загрузит целевой документ в него.
Например:
getURL("http://wnk.biz","left -_frame");
Имя окна или фрейма не должно начинаться с символа «_», так как это атрибут специальных значений параметра window. Также следует учитывать,; что идентификаторы окон и фреймов чувствительны к регистру. 

Обычно указывается имя конкретного окна или фрейма, если содержимое! в нем должно быть обновлено по некоторому событию (например, это может быть окно поиска по базе данных).
Адресовать НТМL-документ можно как абсолютной,  так и относительной ссылкой. Относительные адреса более удобны, если документ хранится там же,  где и фильм, давший команду на его загрузку. Однако использовать их нужно осторожно. Дело в том, что в разных браузерах относительные ссылки при преобразовании в полные адреса могут давать разный результат (часть браузеров в качестве базиса для относительных URL  использует адрес HTML-страницы,  в которую встроен фильм, другие же применяют адрес, с которого был получен SWF-файл). Чтобы этого избежать, необходимо явным образом прописать базис для относительных ссылок в параметр ре base тега <OBJECT> (или одноименном атрибуте тега <ЕМBED>). Особенно полезен данный параметр,
если SWF-файл и HTML-документ, в который он встроен, относятся к разным доменам.
Например,  если открываемые из фильма HTML-страницы хранятся по адресу
www.mysite.server.ru/main, то параметр (атрибут) base следует задать так:
<param name="base" value="http://www.mysite.server.ru/main"/> (тег <OBJECT>)
base=http://www.mysite.server.ru/main      (тег <EMBED>)
В принципе, параметр (аргумент) base может принимать и относительные адреса! (они будут разрешаться исходя из URL страницы). Однако более надежно использовать абсолютные адреса.

Отправка данных серверу
Функция getURL() дает возможность отправить запрос удаленному приложению или серверному скрипту, Для этого используется следующий синтаксис:
getURL(location, window, method);
где
• location — абсолютный или относительный URL, адресующий необходимое приложение или скрипт
• window —параметр, определяющий, в каком окне или фрейме должен быть отображен результат обработки запроса серверным скриптом или удаленным приложением;
• method  —  метод передачи параметров. Flash  поддерживает стандартные методы протокола HTTP, предназначенные для отправки данных на сервер: GET и POST. :

   o Метод GET заключается в том, что строка с переменными присоединяется к URL,
адресующему скрипт или приложение.  При этом пары имя-значение разделяются
при помощи амперсанта (&), а сама строка с переменными отделяется от основной
части URL знаком «?». Количество данных, которые можно передать, используя ме-
тод GET, обычно ограничено 256-1024 байтами (в зависимости от настроек сервера).
Если нужно переслать больший объем данных, то следует использовать метод POST.
Пример URL типа GET:
http://www .mysite.ru/cgi-bin/search?book=ActionScript&author=Gurski
Когда сервер обрабатывает этот URL, вызывается приложение search, хранящееся в
папке cgi-bin. и переменные, прописанные после знака «?», передаются ему в качест-
ве параметров. 
   o Метод POST отличается от метода GET тем, что переменные пересылаются отдель-
ным блоком,  следующим за заголовком HTTP-запроса. В большинстве случаев ме-
тодом POST можно заменить более простой, а следовательно, надежный метод GET,
если на сервер следует передать большой объем данных. Но его нельзя использовать,
если фильм проигрывается автономным плейером, если запрос отправляется Java-сер
веру, а также если страница с фильмом отображается некоторыми браузерами (на-
пример, старыми Netscape Navigator).

У функции getURL() нет параметра, который был бы предназначен для передачи строки или массива с переменными, подлежащими пересылке на сервер. Данная функция попросту объединяет в строку все незащищенные для перечисления переменные данной временной диаграммы и отправляет ее на сервер.
Если переменная хранит величину не строкового типа, то она приводится к типу String. Например:
var a:String="ActicnScript", b:Object{}, с:Array=[1,2,3];
getURL("http://www.mysite.ru/cgi-bin/execute", "_blank", "GET");
/* Сервер получит следующий запрос:
http://www.mysite.ru/cgibin/execute?a=ActionScript&b=%5Bobject+Object%5D&c-1%2С2%2С3
*/ Исходя из того, как функция getURL() формирует запрос,  ее необходимо применять по отношению к клипу, специально созданному для хранения пересылаемых данных. Иначе на сервер помимо нужных будут отправлены и все остальные переменные временной диаграммы.

Функцию getURL() следует использовать, если результат работы серверного скрипта или удаленного приложения должен быть отображен в окне браузера. Если же он должен поступить в фильм, то необходимо применить функцию loadVariables()  или класс LoadVars,  о которых поговорим в следующей главе.

Обращение к локальному файлу
Используя псевдопротокол file, можно открыть практически любой файл накомпью-:ре пользователя. Например, следующий код открывает документ Microsoft Word:
getURL("file://С:\\docs\\text.doc");
Обратите внимание, что обратный слеш «\» в пути к файлу нужно обязательно экранировать парным слешем,  так как в ActionScript  данный символ служит для задания escape-последовательностей.
Определенные ограничения связаны с запуском исполнимых приложений посредством URL типа file. При этом появляется панель безопасности, на которой пользователь должен подтвердить или запретить активизацию ехе-файла. Поэтому если приложение является частью вашего проекта, то его лучше запускать командой «exec» функции fscommand().
URL типа file имеют довольно ограниченное использование. Иногда они применяются проекторами. Например, если вы создаете оболочку для компакт-диска с книгами в формате PDF, то реализовать ссылки или кнопки, открывающие каждую из них, позволяют именно URL типа file.

Вызов программы электронной почты
Довольно часто на сайтах встречаются ссылки, задействовав которые можно отправить E-mail администратору, владельцу или службе поддержки данного ресурса. Реализуются подобные ссылки посредством псевдопротокола mailto, который поддерживается и функцией getURL().
URL типа mailto имеет следующий стандартный синтаксис:
mailto:адрес?поля
где:
• адрес — обязательная часть URL, в которой должен быть указан ящик, на который следует отправить созданное письмо. Если письмо нужно разослать сразу по нескольким адресам, то их нужно отделить друг от друга запятыми;
• поля — необязательная часть IJRL, в которой прописывается информация для полей. Большинство программ электронной почты поддерживают три поля:
   o subject — этому параметру соответствует поле темы письма;
   o сс — при помощи данного параметра можно указать, куда должна быть отправлена
копия письма;
   o bcc —  параметр,  задающий адрес E-mail,  по которому должна быть отправлена
скрытая копия письма.

Задавать значения для всех полей необязательно, но заполнять автоматически хотя
бы поле subject — хороший тон по отношению к посетителям вашего ресурса.
Приведем примеры вызовов нескольких URL типа mailto:
getURL("mailto:diis_ignotis@tut-by");
getURL("mailto:diis_ignotis@tut.by,dct@omen.ru"); getURL("mailto;diis_ignotis@tut.by?subject=Привет&cc=dagi@tut.by&bcc=gurski@
tut.by");
При вызове URL типа mailto запускается программа электронной почты, которая используется в системе по умолчанию. Затем автоматически создается шаблон нового письма. Поля в этом шаблоне заполняются исходя из данных, прописанных в URL.

Взаимодействие с JavaScript 
Возможность организовать взаимодействие между SWF-фильмом и JavaScript  появилась еще во Flash 2 (то есть в 1996  году).  Подобное взаимодействие может быть двухсторонним:  как ActionScript может обращаться к методам и свойствам JavaScript, так и JavaScript может отправлять команды SWF-фильму. Сейчас мы обсудим только то, как посредством getURL() можно обращаться из Flash-фильма к браузерному скрипту. Остальные вопросы из области взаимодействия JavaScript и ActionScript будут рассмотрены позже.

Если необходимо из кода ActionScript вызвать метод JavaScript или переопределить какое-то его свойство,  то можно использовать функцию fscommand()  или getURL().  Применение getURL() предпочтительнее,  так как при этом,  во-первых,  не требуется создавать никаких специальных функций в коде HTML-страницы, а во-вторых, она работает в большом количестве браузеров. Однако об особенностях использования fscommand()  также стоит иметь представление,  поэтому
взаимодействию с JavaScript при помощи этой функции посвящен п. 16.5.5.

Функция getURL() принимает команду, которую нужно передать JavaScript, в формате URL:
getURL(javascript:script); 
где:
• javascript — псевдопротокол, указывающий браузеру, что в URL содержится код JavaScript;
• script  —  код JavaScript,  который необходимо выполнить.  В простейшем случае это может быть просто вызов функции, набранной в теге <SCRIPT>. Однако столь же успешно можно вызвать и метод встроенного объекта или присвоить новое значение предопределенному свойству.
Более того, в URL типа javascript может быть записан сколь угодно большой скрипт, содержащий неограниченное количество выражений любой сложности!
Приведем несколько простых примеров:
// Строка, выводящая панель сообщений, содержащую текст "Привет!"
getURL("javascript:alert('Привет')");
// Строка, изменяющая отображаемый документ на сайт "Питера"
getURL("javascript:window.location='http://www.piter.com'");
// Строка, создающая функцию, а затем выэывающая ее
getURL("javascript:function func(par) {return par};
alert(func('Привет'));");

Если попытаться выполнить команду JavaScript  в автономном плейере,  то будет открыто новое окно браузера и команда будет передана в него.
Успешность взаимодействия SWF-фильма с JavaScript зависит от браузера. В ряде старых браузеров  (например, Internet Explorer 4  для Macintosh)  попытка дать команду JavaScript  при помощи getURL() окажется неудачной. Однако во всех современных браузерах (старше четвертого поколения) взаимодействие между ActionScript и JavaScript возможно в полном объеме.
По умолчанию getURL() может обращаться к скрипту страницы лишь в том случае, если она была получена с того же поддомена, что и SWF-фильм. Обойти это ограничение можно, присвоив значение «always» специальному параметру allowscriptaccess тега <OBJECT> (или одноименному ат-рибуту тега <EMBED>).

Даже если вы не владеете JavaScript, то вы сможете писать небольшие программы на этом языке, пользуясь одним лишь справочником. Дело в том,  что в основе JavaScript  и ActionScript  лежит один стандарт— ЕСМА-262. Поэтому данные языки очень близки. У них один синтаксис,  одни управляющие структуры, одна модель объектно-ориентированного программирования. Даже многие предопределенные классы и глобальные функции у JavaScript и ActionScript общие. Если ис-
пользовать только те элементы языка, которые описаны в ЕСМА-262, то один и тот же код можно одинаково успешно выполнить как во Flash-плейере, так и в браузере.

Возможность взаимодействия с JavaScript чрезвычайно важна для практики. Используя се, можно столь тесно интегрировать браузер и Flash-сайт, что последний будет обладать всеми позитивными качествами HTML-страниц. JavaScript помогает преодолеть недостатки,  связанные с тем, что Flash не является традиционной Web-технологией.

К примеру, легко сделать так, чтобы при наведении указателя мыши на ссылку в строке состояния браузера отображалось, куда она ведет:
// Клип ban — это баннер дружественного ресурса
// Создаем функцию, которая будет выводить в строку состояния значение,
// переданное ей в качестве параметра
getURL ("javascript:function setStatus(par) {window.status=par;}");
// При пересечении указателем мыши границы баннера, ссылка на сайт должна
// быть отображена в строке состояния
ban.onRollOver=function():Void {
   getURL("javascript:setStatus('http://www.flasher.ru');");
};
// При выходе указателя за пределы баннера значение в строке состояния
// должно быть заменено на принятое по умолчанию
ban.onRollOut=function():Void {
   getURL("javascript:setStatus(window.defaultStatus);");
};
Закрыть окно браузера, в котором отображается проект, можно следующей строкой:
getURL("javascript:window.close();");
Если HTML-страница открывается getURL() напрямую, то невозможно произвольно задать характеристики окна браузера, в котором она будет отображена. Окно визуализируется исходя из установок, принятых по умолчанию. Иногда же бывает желательно, чтобы по размерам оно совпадало с встроенным в страницу SWF-фильмом, или чтобы его размеры нельзя было изменить, или же чтобы в нем не было строки меню  (самый простой способ  «победить»  слабую согласованность Flash-сайта с браузером — это просто убрать меню с кнопками навигации и прочими «опасными» элементами). Решить все эти, а также многие другие задачи можно, открыв HTML-страницу посредством метода window.open() JavaScript.

Для примера приведем код,  открывающий HTML-страницу в немасштабируемом окне 300 х 300 пикселей.
getURL("javascript:void window.open('http://www.flasher.ru', null,
'width=300, height=300, menubar, status')");

Если страница с фильмом отображается в Internet Explorer, то ее легко можно перевести в полноэкранный режим (это может быть полезно в случае игр и заставок):
getURL("javascript:void window.open('http://www.flasher.ru/forum', null,
'fullscreen')");

Возможности JavaScript по управлению окном браузера куда шире, чем аналогичные возможности ActionScript  в отношении окна автономного плейера. В частности,  размер окна браузера можно легко изменить.

Следующий код при нажатии кнопки but увеличивает окно, в котором отобража-
ется документе фильмом, на 100 пикселей по горизонтали и на 50 по вертикали:
but.onRelease=function():Void {
   getURL("javascript:window.resizeBy(100, 50)"); };

Об огромных возможностях JavaScript  говорит то,  что с его помощью можно легко перемещать окно браузера.
Следующий код заставляет вращаться по кругу окно,  в котором отображается HTML-документе SWF-фильмом;
var i:Number=0;
this.onEnterFrame=function():Void {
   var x:Number=300+200*Math.cos(i*Math.PI/30);
   var y:Number=300+200*Math.sin(i*Math.PI/30);
   getURL("javascript:window.moveTo("+x+","+y+");");
   i++;
};

Используя JavaScript,  можно динамически изменять ширину и высоту области отображения,  се
выравнивание и прочие параметры SWF-фильма как внедренного в HTML-страницу объекта. Чтобы воспользоваться этой возможностью, необходимо присвоить фильму уникальный идентификатор. Для этого у тега <OBJECT> имеется атрибут id, а у тега <EMBED> — атрибут name. Присвоив фильму имя,  к нему можно обращаться точно так же,  как к предопределенным объектам JavaScript.

Для примера создадим код, который будет при нажатии кнопки but изменять размеры
области отображения фильма исходя из значений, введенных пользователем в поля w (ширина) и h (высота):
// Функция, служащая для задания размеров объекта с именем name
getURL("javascript:function setSize(name, n_w, n_h) { this[name).width=n_w,
this[name].height=n_h}");
// Изменяем размер области отображения данного фильма (назовем его mov)
but.onPress=function():Void {
   getURL("javascript:setSize('mov',"+w.text+", "+h.text+");");
};
Интересных примеров взаимодействия ActionScript и JavaScript можно привести еще очень много. Но,  увы,  объем книги ограничен.  Поэтому если вас заинтересовал данный вопрос,  вооружитесь справочником по JavaScript и экспериментируйте. То, что вы не заскучаете, гарантировано.