воскресенье, 28 июня 2009 г.

IE vs Flash (AS3)

Решил тут записывать о моментах возникающих в разработке на Flash (AS), себе для памяти, а может кому еще пригодится.

Практически все знают, что IE очень своеобразный браузер, но он все еще не перестает меня удивлять. Даже казалось бы в кроссплатформенный флеш он вносит свои коррективы.

IE VS Flash

Итак был себе мирно код для прелоадера на AS3, никого не трогал:


loaderInfo.addEventListener(ProgressEvent.PROGRESS, loadingListener);
private function loadingListener (e:ProgressEvent):void
{
  if(e.bytesLoaded>=e.bytesTotal)
  {
    gotoAndStop(2);
  }
}



Но, оказывается, если Internet Explorer закэшировал флешку, то ProgressEvent не работает.
Поэтому, надо использовать старый добрый onEnterFrame:


root.addEventListener("enterFrame",onEnterFrame);
function onEnterFrame(e:Event)
{
  if(loaderInfo.bytesLoaded >= loaderInfo.bytesTotal)
  {
    gotoAndStop(2);
    root.removeEventListener("enterFrame",onEnterFrame);
  }
}



либо отдельно добавить проверку загрузки


if (loaderInfo.bytesLoaded >= loaderInfo.bytesTotal)
{
  gotoAndStop(2);
}

Приятного кодинга!

5 комментариев:

  1. На самом деле, Flash Player очень даже не кросс платформенный. Иногда оптимизация флеш-ролика под разные браузеры, занимает намного больше времени, чем оптимизация HTML-кода.

    Существует две версии плагина:

    1. Для Internet Explorer
    2. Для FireFox, Opera, WebKit

    Всегда стоит проверять обе версии. Бывает что-то работает в одном, но не работает в другом.

    Также при вставки флеш-ролика на странице, есть параметр "wmode". От него тоже многое зависит. Если, например, подставить ему значение "transparent", то в редактируемых текстовых полях не будут вводиться русские буквы (а также все другие не латинские символы). При значении "opaque", событие MouseEvent.MOUSE_WHEEL ловиться в версии для IE, но не ловиться для FireFox. Следует следить за этим значением.

    Плюс существует версии FlashPlayer для Linux.

    ОтветитьУдалить
  2. 2 AS3Coder

    Читал, что wmode рекомендуют ставить "opaque" (если выбирать между "transparent" и "opaque"). Правда в нем тоже русские буквы в input-тексте не работают, почему не поправят - непонятно

    ОтветитьУдалить
  3. Достаточно добавить листенер на событие Event.COMPLETE и проблема больше не имеет места, совсем. И не надо никаких проверок на кол-во байт.
    Понимаю, что статья старая, может уже и сами знаете -- но мало ли, может так и ходите в неведении, мучаясь в раздумьях, и своих читателей в заблждение вводите. :)

    ОтветитьУдалить
    Ответы
    1. А могли бы вы подробнее объяснить как это сделать? Я тоже столкнулся с проблемой, что не работает скрол в Firefox.

      Удалить
  4. Да, тогда только начинал работать с AS3, и такое поведение ИЕ даже во флеш очень удивило ;)

    ОтветитьУдалить