Firefox 2 też potrafi zawieść...
16 lipca, 2008
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 ?