Dominik N.

Dominik N. Człowiek od zadań
niewykonalnych.

Temat: Problem z preloaderem w IE i Operze

Witajcie. Zrobiłem sobie banalny preloader na bazie skryptu znalezionego w internecie. Skrypt wygląda następująco:

stop();

addEventListener(Event.ENTER_FRAME, loaderF);

function loaderF(e:Event):void{
var toLoad:Number = loaderInfo.bytesTotal;
var loaded:Number = loaderInfo.bytesLoaded;
var total: Number = loaded/toLoad;
if (toLoad == loaded)
{
removeEventListener(Event.ENTER_FRAME, loaderF);
play();
} else {
pasek.scaleX = total;
}
}


No i teraz problem w tym, że pod FF wszystko jest ok, natomiast zarówno pod IE 7 jak i pod Operą 10 (czyli jak sądzę wszędzie indziej również) występują błędy z wyświetlaniem tego preloadera. Czy ktoś jest w stanie podać mi przyczynę oraz jakiś środek zaradczy?
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: Problem z preloaderem w IE i Operze

nie używaj enter frame. Jeśli anulujesz ładowanie albo zaczniesz ładować nagle co innego do tego loader a poprzednie ładowanie się nie skończy nie usuniesz uchwytu enterFrame. Klasa która ma podpietego listenera nie zostanei usunięta przez garbage colector, a Ty możesz nie być świadomy że cały czas odbiera eventy i muli procesor niepotrzebnie.


public class LoaderExample extends Sprite
{
private var loader:Loader = new Loader();

public function LoaderExample() {

configureListeners(loader.contentLoaderInfo);
loader.addEventListener(MouseEvent.CLICK, clickHandler);

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
loader.contentLoaderInfo.addEventListener(Event.OPEN, openHandler);
[b]loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);[/b]
loader.contentLoaderInfo.addEventListener(Event.UNLOAD, unLoadHandler);


var request:URLRequest = new URLRequest(url);
loader.load(request);

addChild(loader);
}





private function completeHandler(event:Event):void {
trace("completeHandler: " + event);
}

private function httpStatusHandler(event:HTTPStatusEvent):void {
trace("httpStatusHandler: " + event);
}

private function initHandler(event:Event):void {
trace("initHandler: " + event);
}

private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}

private function openHandler(event:Event):void {
trace("openHandler: " + event);
}
[b]
public function progressHandler(event:ProgressEvent):void {
trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
}[/b]

private function unLoadHandler(event:Event):void {
trace("unLoadHandler: " + event);
}

private function clickHandler(event:MouseEvent):void {
trace("clickHandler: " + event);
var loader:Loader = Loader(event.target);
loader.unload();
}
private function dispose()
{
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
loader.contentLoaderInfo.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
loader.contentLoaderInfo.removeEventListener(Event.INIT, initHandler);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
loader.contentLoaderInfo.removeEventListener(Event.OPEN, openHandler);
[b]loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressHandler);[/b]
loader.contentLoaderInfo.removeEventListener(Event.UNLOAD, unLoadHandler);
}

}
Jerzy Wierzchowski edytował(a) ten post dnia 20.08.10 o godzinie 15:07
Dominik N.

Dominik N. Człowiek od zadań
niewykonalnych.

Temat: Problem z preloaderem w IE i Operze

Jerzy Wierzchowski:
nie używaj enter frame. Jeśli anulujesz ładowanie albo zaczniesz ładować nagle co innego do tego loader a poprzednie ładowanie się nie skończy nie usuniesz uchwytu enterFrame. Klasa która ma podpietego listenera nie zostanei usunięta przez garbage colector, a Ty możesz nie być świadomy że cały czas odbiera eventy i muli procesor niepotrzebnie.

Ok, wezmę pod uwagę, bo metoda chyba faktycznie nie najlepsza. Natomiast w kwestii samego preloadea. Co może powodować, że w innych przeglądarkach niż FF wygląda on tak:

Obrazek


Obrazek
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: Problem z preloaderem w IE i Operze

jakbyś dostawał progres na minusie:) Ostatnio kożystałem z queueLoader i miałem dziwny fuckup w oprze bo pliki nie chciały się ładować (strasznie wolno szły). W między czasie ładowałem jeszcze wideo do backgroundu i nawet jak się skończył lądować do dalej było wolno. Player się jakoś różnią chyba w kwesti ładowania kilku strumieni na naraz bo w firefoxie śmigało jak złe. Zainstalowałem w operze najnowszego playera i problem sie rozwiazał. Dziwne bo był zainstalowany w operze fp 10 tylko po kropce było co innego... Ciezko na stronie oczekiwać od usera pobrania najświeższego releasu fp 10.
Wracając do temau, w bandwith profilerze działa dobrze?
Dominik N.

Dominik N. Człowiek od zadań
niewykonalnych.

Temat: Problem z preloaderem w IE i Operze

Jerzy Wierzchowski:
jakbyś dostawał progres na minusie:) Ostatnio kożystałem z queueLoader i miałem dziwny fuckup w oprze bo pliki nie chciały się ładować (strasznie wolno szły). W między czasie ładowałem jeszcze wideo do backgroundu i nawet jak się skończył lądować do dalej było wolno. Player się jakoś różnią chyba w kwesti ładowania kilku strumieni na naraz bo w firefoxie śmigało jak złe. Zainstalowałem w operze najnowszego playera i problem sie rozwiazał. Dziwne bo był zainstalowany w operze fp 10 tylko po kropce było co innego... Ciezko na stronie oczekiwać od usera pobrania najświeższego releasu fp 10.
Masakra z tym.
Wracając do temau, w bandwith profilerze działa dobrze?
Owszem. To było moje pierwsze sprawdzenie. W profilerze wygląda wszystko dobrze, buforuje wszystko jak trzeba bez problemu. Tutaj problem jest dziwaczny, bo myślałem, że flash we wszystkich przeglądarkach zachowuje się tak samo. Chyba wiem co zrobię. Wezmę po prostu jakąś maskę która będzie się przesuwać w miarę ładowania. Powinno być po krzyku.
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: Problem z preloaderem w IE i Operze

wrzucaj wartość do pola tekstowego i zacznij zaczytwac duży plik(np wielki plik BMP z 32 bitami koloru:) . Zobacz co się dzieje
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: Problem z preloaderem w IE i Operze

ja bym wrzucił też skalowanie paska:
private const MAX_LEN:uint = 300;

function progressHanlder(evt:event)
{
var toLoad:Number = evt.target.bytesTotal;
var loaded:Number = evt.target.bytesLoaded;
var total: Number = loaded/toLoad;
pasek.width =MAX_LEN * total
}

Bedziesz mógł dowolnie regulowac dłuość paska w preloaderze
Widze że masz biały pase pod spodem.
const PADDING:uint = 5;

( ...)
bialy_pasek.x = pasek.x - PADDING; //("biały pasek tła" będzie zaczynał się o 5 pixli przed paskiem postępu)
this.MAX_LEN = bialy_pasek -( PADDING*2);//skończy się 5 pixli przed końcem "białego paska tla"

//teraz możesz ładować:)
Dominik N.

Dominik N. Człowiek od zadań
niewykonalnych.

Temat: Problem z preloaderem w IE i Operze

Jerzy Wierzchowski:
wrzucaj wartość do pola tekstowego i zacznij zaczytwac duży plik(np wielki plik BMP z 32 bitami koloru:) . Zobacz co się dzieje

Jest to dla mnie dość zagadkowe. Wróciłem do domu, pobrałem z FTPa backup który miałem gdzieś tam zachowany, dodałem tylko fragment kodu który odpowiada za wyświetlanie procentów:
stop();

addEventListener(Event.ENTER_FRAME, loaderF);

function loaderF(e:Event):void{
var toLoad:Number = loaderInfo.bytesTotal;
var loaded:Number = loaderInfo.bytesLoaded;
var total: Number = loaded/toLoad;
if (toLoad == loaded)
{
removeEventListener(Event.ENTER_FRAME, loaderF);
play();
} else {
pasek.scaleX = total;
pole1.text = Math.floor(total*100) +"%";
pole2.text = "Załadowano " + Math.floor (loaded/1000) + " kB. z " + Math.floor (toLoad/1000) + " kB."; }
}


i teraz działa idealnie na wszystkim z IE6 włącznie.


Obrazek


Nie wiem co było przyczyną. Nie działało, nagle zaczęło, jakby samo. Może wersja Flasha z pracy ma jakiegoś doła ;)

Dziękuję bardzo za poświęcony czas.

pozdrawiam,
D.Dominik N. edytował(a) ten post dnia 20.08.10 o godzinie 18:27
Dominik N.

Dominik N. Człowiek od zadań
niewykonalnych.

Temat: Problem z preloaderem w IE i Operze

Jednak nie działa. Natomiast co ciekawe, nie działa na naszym serwerze. Jak wystawiłem na prywatny, to działa. :(Dominik N. edytował(a) ten post dnia 20.08.10 o godzinie 18:30

konto usunięte

Temat: Problem z preloaderem w IE i Operze

a może gzip'ujecie swfy?
http://patrickmcd.com/2009/04/20/flash-preloading-erro...
Dominik N.

Dominik N. Człowiek od zadań
niewykonalnych.

Temat: Problem z preloaderem w IE i Operze

Krzysztof Opałka:
a może gzip'ujecie swfy?
http://patrickmcd.com/2009/04/20/flash-preloading-erro...

Patrząc na objawy, wygląda na ciekawy trop. Byłbyś uprzejmy napisać mi o tym cokolwiek więcej? Bo z tego co zrozumiałem gzipowanie odbywa sie po stronie serwera. Chyba. że coś pochrzaniłem.

konto usunięte

Temat: Problem z preloaderem w IE i Operze

Jak masz gzipowany content to flash nie jest w stanie obliczyć bytesTotal (dopóki nie załaduje całego pliku bytesTotal==0), więc bytesLoaded/bytesTotal == nieskońconość (Infinity).
U mnie wyglądało to tak, że pasek preloadera pozostawał na 0%, a potem skakał nagle do 100%.
Gzipowanie można włączyć/wyłączyć po stronie serwera.

http://stackoverflow.com/questions/3537038/as3-preload...

Pogooglaj, a na pewno znajdziesz więcej.
Dominik N.

Dominik N. Człowiek od zadań
niewykonalnych.

Temat: Problem z preloaderem w IE i Operze

Krzysztof Opałka:
Jak masz gzipowany content to flash nie jest w stanie obliczyć bytesTotal (dopóki nie załaduje całego pliku bytesTotal==0), więc bytesLoaded/bytesTotal == nieskońconość (Infinity).
U mnie wyglądało to tak, że pasek preloadera pozostawał na 0%, a potem skakał nagle do 100%.
Gzipowanie można włączyć/wyłączyć po stronie serwera.

http://stackoverflow.com/questions/3537038/as3-preload...

Pogooglaj, a na pewno znajdziesz więcej.

Dzięki! Nie wiem, czy mam aż takie możliwości administracji tym serwerem, żeby grzebać w tych ustawieniach, ale kto wie. Tak czy siak dzięki za trop.

konto usunięte

Temat: Problem z preloaderem w IE i Operze

SetEnvIfNoCase Request_URI .swf$ no-gzip dont-vary

w ten sposób możesz wyłączyć gzip'owanie tylko plików *.swf
Dominik N.

Dominik N. Człowiek od zadań
niewykonalnych.

Temat: Problem z preloaderem w IE i Operze

Krzysztof Opałka:
SetEnvIfNoCase Request_URI .swf$ no-gzip dont-vary

w ten sposób możesz wyłączyć gzip'owanie tylko plików *.swf

Wielkie dzięki! Przekaże komu trzeba. Może coś z tego będzie!
Dominik N.

Dominik N. Człowiek od zadań
niewykonalnych.

Temat: Problem z preloaderem w IE i Operze

Wyłączyliśmy GZipa i zadziała... ale tylko na Operze i FF. IE nadal nie reaguje. No ale poszliśmy do przodu więc bardzo wielkie dzięki!
Dominik N.

Dominik N. Człowiek od zadań
niewykonalnych.

Temat: Problem z preloaderem w IE i Operze

Już wiemy na pewno - to GZip stanowi problem. Rzecz w tym, że nie mamy pełnego dostępu do naszego serwera (mamy nieco badziewny system hostingowy). Toteż po części coś tam się udało zrobić - dlatego zadziałało pod Operą, natomiast do pełni szczęścia nie mamy uprawnień.

Temat wyczerpany, jeszcze raz wszystkim bardzo dziękuję za bezinteresowną pomoc.

pozdrawiam,
D.

Następna dyskusja:

problem z preloaderem (as2 ...




Wyślij zaproszenie do