ActionScript краткий обзор

       

ActionScript краткий обзор


Интеграция Flash с веб-приложениями > Обмен информацией с удаленными файлами

Обмен (отсылка и получением) информацией с удаленными файлами

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

Серверные скрипты могут запрашивать разнообразную информацию из баз данных что позволяет производить обмен информацией между базой данных и Flash-клипом (например, в настоящее время на http://polar-lights.com/en/ производится разработка расширения Flash2Databases для общения флеша с базами данных - Прим. переводчика). Серверные скрипты могут быть написаны на разных языках, причем наиболее предпочтительными и современными языками являются PHP (прямой наследник Perl) и ASP (Microsoft Active Server Pages) несколько более устаревший, но могучий Perl все еще не теряет актуальности, а более редкими но мощными и интересными языками являются JSP (Java Server Pages) и особенно удобный и простой для разработчика CFM (Allare ColdFusion).

Хранение информации в базах данных и динамическая подгрузка ее во Flash-клип позволяет создавать Flash-страницы с динамическим и персонализированным содержанием. Например, можно создать доску объявлений, чат, персональный профайл для пользователя или "shopping cart" (корзину покупок), которая будет помнить все покупки клиента, что может помочь в определении его предпочтений.

Вы можете использовать некоторые команды Actionscript и методы объектов для передачи информации внутрь и за пределы Flash-клипа. Каждая команда и метод могут использовать свой протокол для передачи информации, каждый из которых, в свою очередь, может требовать определенной разметки (формата) передаваемой информации.

Команды getURL, loadVariables и loadMovie используют HTTP или HTTPS протокол для посылки информации в кодированном формате URL.




Методы XML.send, XML.load и XML.sendandLoad используют HTTP или HTTPS протокол для посылки информации, как XML.

Методы XMLSocket.connect и XMLSocket.send создают и используют a TCP/IP сокет и соединение для посылки информации, как XML.

О безопасности

Во время воспроизведения Flash-клипа в браузере, можно загрузить данные в этот клип только из файла на сервере в том же субдомене. (Это, по замыслу Макромедии, должно было запретить Flash-клипам даже думать о попытках загрузить информацию с чужих серверов. Тем не менее все существующие на данный момент (21.09.2000) Flash-плееры для всех браузеров позволяют загружать во Flash-клип SWF-файлы с любого другого сервера по команде Load Movie. - Прим.переводчика)

Для определения субдомена URL состоящего из одного или двух компонентов, используется имя домена:



Domain

Subdomain

http://macromedia

macromedia http://macromedia.com macromedia.com

Для определения субдомена URL состоящего из более чем двух компонентов, удаляют верхний уровень:

Domain

Subdomain

http://x.y.macromedia.com

y.macromedia.com http://www.macromedia.com macromedia.com

Следующий график показывает как Flash плеер определяет разрешить или нет HTTP запрос:

Используя XMLSocket объект для создания сокет-соединения с сервером, нужно использовать порт с номером 1024 или выше. (Порты с меньшими номерами обычно используются стандартными вещами типа Telnet, FTP, World Wide Web или Finger.)

Flash-клипам доступны все стандартные возможности браузеров в части HTTP и HTTPS защищенных соединений. По существу, Flash предоставляет ту же защищенность, что доступна при применении стандартного HTML протокола. Нужно следовать тем же правилам, которым обычно следуют при создании страниц с функцией защищенного соединения. Проще говоря команда LoadVariables произведенное из Flash-клипа (безразлично с передачей переменных или нет) оказывает точно такое же воздействие на сервер как и загрузка соответствующего скрипта или файла в стандартное окно браузера (с передачей тех же переменных и тем же методом).




Для защиты паролем чего-либо, используйте текстовое поле для запроса пароля от пользователя. Введенное значение можно отправить на сервер командой loadVariables или методом XML.sendandLoad, указав в свойствах HTTPS URL и метод POST. И уже на сервере можно будет проверить пароль и произвести соответствующие действия - чаще всего применяется генерация ответа от сервера в виде понятном для Flash (например var=something&var2=another& для случая LoadVariables). Полученные от сервера данные можно обработать внутри Flash-клипа и произвести какие-либо действия в зависимости от полученной информации. Другие методы обработки паролей (например проверка внутри Flash-клипа) не могут обеспечить сколько-нибудь стойкой защиты.


  Проверка загруженности данных

Каждая команда и метод загружающие данные во Flash-клип (кроме XMLSocket.send) является асинхронным, т.е. результаты этого действия возвращаются через неопределенное время.

Перед тем как использовать полученные из удаленного источника данные во Flash-клипе, необходимо проверить, загружены ли эти данные или еще нет. Например, нельзя использовать команду LoadVariables и манипулировать полученными значениями в одном ключевом кадре. В следующем примере нельзя использовать переменную lastFrameVisited, если она загружается из файла myData.txt. Более того, ее нельзя использовать и в последующих кадрах до тех пор пока не будет полной уверенности в том, что загрузка данных из файла myData.txt завершилась. Короче говоря, этот скрипт написан неправильно.

loadVariables("myData.txt", 0); gotoandPlay(lastFrameVisited);

Каждая команда и метод требуют использования специфической техники проверки загруженности данных. При использовании команд loadVariables или loadMovie можно загрузить информацию в символ типа movie clip и использовать событие data в контейнере действия onClipEvent. Замечательным свойством Flash5 является тот факт, что команда loadVariables при загрузке переменных в Target (в Movie clip, а не в Level), событие onClipEvent(data) происходит только после окончания загрузки последней переменной. Если же загружать переменные из отдельного .swf файла командой loadMovie (например при загрузке данных с другого домена), событие onClipEvent(data) происходит после загрузки каждого фрагмента этого .swf файла (т.е. обычно несколько раз).




Например, кнопка со следующей командой загружает переменные из файла myData.txt в символ типа movie clip с именем (Name в окошке Instance/Instance) loadTargetMC (причем этот movie clip расположен в основной Timeline):

on(release){ loadVariables("myData.txt", _root.loadTargetMC); }

Если какая-либо команда внутри символа loadTargetMC использует переменную lastFrameVisited, загруженную из внешнего файла myData.txt, то следующее действие будет выполнено только после окончания загрузки всех переменных из этого файла, включая lastFrameVisited:

onClipEvent(data) { gotoandPlay(lastFrameVisited); 1

}

При использовании методов XML.load и XMLSocket.connect можно определить программу обработки (XML handler) данных, которая будет обрабатывать данные после их появления. Программа обработки это свойство XML и XMLSocket объектов, к которому привязаны определенные вами (набитые на клавиатуре в окошке "Actions") функции. Программы обработки вызываются автоматически сразу после получения информации. Для XML объекта используйте XML.onLoad, а для XMLSocket объекта - XMLSocket.onConnect.

Для более подробной информации, щелкайте мышкой сюда Использование XML объекта и Использование XMLSocket объекта.

От переводчика:

Cудя по всему, переменная "lastFrameVisited" это что-то вроде вручную созданной переменной с именем подобным "КадрНаКоторыйВыХотитеПерейти". Она не имеет никакого отношения к стандартным функциям и свойствам Flash и не связана с проверкой загруженности данных. Так что не советую забывать дописывать в конец файлов предназначенных для загрузки в основную Timeline Flash-клипов что-то вроде

&finishloading=1&

и каким-либо циклом ожидать появления во Flash-клипе переменной "finishloading" равной 1. И только после появления этой переменной делать вывод об окончании загрузки данных. Для этого случая можно сказать в каком-либо кадре

loadVariables("myData.txt", 0);

в следующем кадре

play ();

и в третьем кадре

if (finishloading!=1) { prevFrame (); }



Содержание раздела