W momencie kiedy Firefox 2 zaczyna powoli ustępować swojemu następcy odkryłem coś co nigdy mi się tak nie rzucało w oczy, ale w pewnej dość skrajnej sytuacji stało się nie lada problemem. Mianowicie Firefox 2 wywołuje zdarzenie onLoad wcześniej niż inne przeglądarki (IE7, Firefox 3, Opera i Safari, natomiast IE6 nie miałem okazji przetestować w tej kwestii, bo go zwyczajnie już nie posiadam ;)

Otóż Firefox 2 (oczywiście poprzednie wersje także) wywołuje zdarzenie onLoad PRZED załadowaniem obrazków ustawionych jako tła elementów. Rzuciło mi się to w oczy dopiero na stronie gdzie miał być wykonany preloader dla obrazków, a sama strona wyposażona była tylko w grafiki ustawione jako tło w CSS. No i okazało się, że w Firefoksie 2 obrazki związane z preloaderem ładują się przed załadowaniem się obrazków tła - nie muszę mówić, że efekt był daleki od oczekiwanego :)

Najgorsze jednak jest to, że nie znalazłem na ten problem żadnego sensownego rozwiązania - jedyne jakie znalazłem opierało się na zmianie ustawień samej przeglądarki, ale tam za bardzo nie ma dostępu z poziomu skryptu, zatem jedyne jak dotąd naprawdę skuteczne rozwiązanie odpadło.

Dlaczego o tym w ogóle piszę ? Po to by nikt mi nie mówił, że Firefox 2 i 3 nie mają żadnych istotnych różnic w obsłudze JavaScript, a właściwości gecko18 i gecko19 obiektu Browser w MooTools 1.2 to jedyne "akademickie bajerki" ;)

Oczywiście nie zmienia to faktu, że nadal nie znam eleganckiej metody na rozwiązanie problemu i pozostała mi metoda "na wyczucie" czyli warunek w stylu:

if(Browser.Engine.gecko18)
{
	(function(){
		// rozpoczęcie ładowania obrazków z preloadera
	}).delay(2000);
}

Nie jest to ani uniwersalne, ani ładne, ale w dużej ilości przypadków pomaga, bo z reguły tła CSS zdążą się załadować przed normalnymi obrazkami z preloadera.

A może ktoś zna inną, ładniejszą metodę na obejście tego problemu ?

Komentarze do wpisu "Firefox 2 też potrafi zawieść...":

1. ducat napisał(a):
17 lipca 2008, 15:08:39

Co do IE6 polecam MultiIE :)
http://tredosoft.com/files/multi-ie/multiple-ie-setup.exe

A wracając do sedna artykułu, cóż ... nikt nie jest idealny :P, całe szczęście że ciągle idzie ku lepszemu. Nawet IE już tak bardzo w webmasterce nie przeszkadza.

Gdyby jeszcze użytkownicy aktualizowali w miarę szybko oprogramowanie – ech rozmarzyłem się.

2. Dziudek napisał(a):
17 lipca 2008, 15:29:01

@ducat – może inaczej – ja po prostu już się nie interesuję jak wyglądają strony w IE6 :P Mam gdzieś to 10-letnie badziewie i tyle ;]

3. D4rky napisał(a):
17 lipca 2008, 23:01:55

DOMContentLoaded? Chociaz nie wiem co wlasciwie probujesz osiagnac, bo namieszales we wpisie okrutnie

4. Dziudek napisał(a):
17 lipca 2008, 23:03:05

@D4rky – yyy… DOMContentLoaded jest zdecydowanie wcześniej niż onLoad, a mi chodzi o to, że onLoad w Fx2 i starszych wywołuje się przed załadowaniem teł CSS ;)

5. D4rky napisał(a):
17 lipca 2008, 23:08:34

ale nie rozumiem problemu. o co chodzi z tym preloaderem dla obrazkow i dlaczego nie ma dotyczyc tel? Oo”

6. Dziudek napisał(a):
17 lipca 2008, 23:14:13

Sprawa wygląda tak, że najpierw ma ładować się strona, gdzie wszystkie grafiki występują jako tła ustawione w CSS. Po załadowaniu się layoutu strony ma dopiero załadować się grafika w skrypcie, który zawiera grafiki ważące koło 300kB – zatem takie zachowanie jest dość pożądane by nie opóźniało załadowania strony.

Sęk w tym, że po uruchomieniu skryptu wraz z wystąpieniem zdarzenia onLoad we wszystkich przeglądarkach poza Firefoksami <= 2.0.0.x tła CSS ładują się po załadowaniu obrazków z preloadera – zatem zanim załadują się tła mija sporo czasu (tak jakby tła CSS miały mniejszy priorytet od osadzonych img) i strona sprawia wrażenie ładującej się dość długo.

Dodaj komentarz:

Textile Lite włączony ( szczegółowy opis znaczników ):
*strong* | # lista numerowana | * lista wypunktowana | _em_ | __italic__ | "link":http:// | bq. cytat.