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 ?
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: