В этом обучающем видео-скринкасте я рассказываю о том как заменить курсор в Flash приложении на свой(картинку), средствами ActionScript3, для разработки используется бесплатный редактор FlashDevelop. Это мой первый скринкаст, поэтому просьба сильно не пинать. Предлагайте темы для новых скринкастов.

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

 

Преимущество и краткий обзор FlashDevelop я уже делал в одной из предыдущих статей. Несколько сумбурно, но все таки там есть что почитать.

Для начала скачиваем все необходимое:

  1. FlashDevelop. последний на момент написания статьи 3.2.2
  2. Adobe Flex SDK.
  3. Debug Flash Player для вашего барузера.

Если у вас еще не стоит Java 1.6+, то ставим ее, а для пользователей XP нужно сделать апгрейд update .NET 2.0 framework to SP2.

Читать далее…

 

Когда мы отправляем на сервер запрос одной и той же структуры и с одними и теми же параметрами, он кешируется, поэтому когда нам нужно запросить новую порцию данных по этому же url, браузер говорит flash, что эти данные у него уже есть и запроса на сервер не делает. Это относительно распространенная проблема с кешированием в Internet Explorer. У меня она возникла при написании чата, требования к чату были такими, что можно было использовать только flash (только он помогает победить same-origin-policy), нужно было отправлять запросы к домену отличному от текущего. Подробнее о чате напишу как-нибудь в другой раз, про все эти политики безопасности и ограничения, и что предлагает flash для решения этих проблем. Итак, как исправлять ?!

Flash.

Решение в принципе лежит на поверхности, подобным пользуются не только в flash, это распространенный способ избежать кеширования в браузере. Мы просто добавляем уникальный параметр в запрос. В данном примере я использую timestamp через метод класса Date() – date.getTime(), который передаю в качестве параметра key в запросе.


var request:URLRequest = new URLRequest("http://domain.ru/chat_receive.php");
var variables:URLVariables = new URLVariables();
 var date:Date = new Date();
 variables.key = date.getTime();

 request.data = variables;
 request.method = URLRequestMethod.GET;

Важно передавать параметры через URLVariables, первый раз я просто добавил параметры прямо в строку url “http://domain.ru/chat_receive.php”, почему-то IE это не очень понравилось, и он все равно все успешно кешировал.

Back-end.

Теперь делаем фикс на back-end, у меня это PHP, но реализации для других языков отличается не существенно. Зачем мы это делаем ? Способ который помог избежать проблемы, не отключает кеширование, то есть информация все равно попадает в кеш, и теперь ее на порядки больше. Для того чтобы не забивать кеш браузера, мы ставим в заголовок параметр Expires. А также отдаем в заголовке параметры, что кешировать не надо (в отличие от других браузеров ie этого не слушается, для этого мы и передавали уникальный параметр). Вот что у нас получилось:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // disable IE caching
 header("Last-Modified: " . gmdate( "D, d M Y H:i:s") . " GMT");
 header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
 header("Pragma: no-cache"); // HTTP/1.0

Все Internet Explorer побежден.

 

Хотелось бы провести небольшой обзор интересного редактора FlashDevelop. Каждый работавший в Adobe Flash CS с ActionScript обращал внимание на неудобство работы с кодом в этом IDE, а так же отсутствие навигации по файлам проекта, да что там, на отсутствие вообще такого понятия, как проект. Возможно есть такие, кто сейчас скажет: “Серьезный проект, да тебе во Flex”. С одной стороны не могу не согласиться, во Flex работы с проектами на уровне, да и плагин Flex к Eclipse очень хорош. Но работа с Flex, это работа в MXML. А что делать когда нет желания-умения-возможностей. Итак, если все выше написанное вам близко, вам под кат. Читать далее…

 

В очередной раз удивившись, поисковому запросу к моему блогу (“flex класс md5″). Решил помочь ищющим. Хотя тут сразу надо оговорится, что класс для flash, так же применим и для flex. Соответственно он будет обычным, написанным на ActionScript 3 классом. Скачать его можно тут. Как подключать класс писать не буду, думаю вам это известно.
Как всегда отвечаю на вопросы в комментариях.