Показаны сообщения с ярлыком багофичи. Показать все сообщения
Показаны сообщения с ярлыком багофичи. Показать все сообщения

четверг, 8 июля 2010 г.

Контейнер Вконтакта и работа компонент во флеше

Vkontakte logo

Понадобилось использовать контейнер для приложения vkontakte (т.к. некоторые матоды работают только из контейнера) и столкнулся с тем что перестал адекватно работать самописный скроллер.

В процессе поиска нашел решение в FAQ Вконтакта и хотя там написано: "При использовании контейнера стандартные компоненты флеша работают некорректно. Как это исправить?" - этот метод подошел и мне, хотя это был не стандартный компонент.
Так что при глюках советую сначала попробовать решение проблемы с flash-компонентами от Святослава Лисина:

addEventListener( Event.ADDED_TO_STAGE, onAddedToStage );
function onAddedToStage(e: Event): void
{
   Security.allowDomain("*");
   stage.dispatchEvent(new Event(Event.DEACTIVATE));
   stage.dispatchEvent(new Event(Event.ACTIVATE));
}

PS
Бонус - опытным путем, после некоторого количества поиска решения было выяснено, что продвинутый загрузчик фотографий vkontakte не загружает картинки если одна из сторон меньше 60px (примерно), при этом никаких пояснений не выдается и нигде не описывается.

воскресенье, 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);
}

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