Czy mi się wydaje, czy w Operze nie ma obsługi zdarzenia onload dla obrazków? Mam problem w wersji 7.50. Dodam, że onerror działa.
U mnie działa.
Działa.
Ano rzeczywiście, działa... nawet dla obrazków utworzonych w JS działa...
Tylko dlaczego nie działają mi te funkcje:
function loadFile() { loading_file=new Image(); loading_file.src='http://free.of.pl/d/daroc/graphic/menu_top.gif'; loading_file.onload=loaded; loading_file.onerror=notLoaded; }; function loaded() { alert('OK'); }; function notLoaded() { alert('BADFILE'); }; onload=loadFile;
Po prostu nic się nie dzieje...
Dodam, że pod IE i Mozillą działa...
Musisz mieć błąd gdzie indziej, bo u mnie ten kod działa na Operze 7.23 i 7.51.
Ja używam O7.50 i jeszcze raz sprawdziłem... skopiowałem ten kod do notatnika i jedynie objąłem go znacznikiem <script> i nie działa... Tzn. włączam i nic się nie dzieje (JS mam włączone ;]).
Może tak:
loading_file.onload=loaded();
loading_file.onerror=notLoaded();
Originally posted by d.i.z.
Może tak:
loading_file.onload=loaded();
loading_file.onerror=notLoaded();
AFAIK w takich sytuacjach robi się po prostu funkcja; (bez nawiasów), nie pamietam już dlaczego, ale kiedyś tak czytałem na grupach o JS.
Ale jeśli nawet tak zrobię, to:
W Operze: pojawia się komunikat OK, a po nim BADFILE (czyli sprzeczność).
W IE: pojawia się komunikat OK, a później błąd JS: "nie zaimplementowano".
UPDATE:
Gdy zrobiłem loadFile(), zamiast onload=loadFile(), to działa... Sam nie wiem... raz ta funkcja działa, raz nie...
Tak jak pisze d.i.z. jest na pewno źle, bo wtedy wykona te funkcji i ich wynik spróbuje przypisać do zdarzeń onload i onerror. Brak nawiasów mówi o tym, że przypisujemy funkcje, a nie jej wynik.
BTW: Znalazłem źródło problemu Opera generuje zdarzenie onload tylko dla obrazków pobranych z serwera, a nie a cache'u. Wydaje mi sie, że to błąd. Można temu zaradzić dodając do obrazka jakiś query string:
[PHP]function loadFile() {
loading_file=new Image();
loading_file.src='http://free.of.pl/d/daroc/graphic/menu_top.gif?%27+Date();
loading_file.onload=loaded;
loading_file.onerror=notLoaded;
}
function loaded(){
alert('OK');
}
function notLoaded() {
alert('BADFILE');
}
onload=loadFile;[/PHP]
Nie radziłbym tego stosować przy obrazkach, które miałyby być ładowane często albo są bardzo duże, bo można w ten sposób bardzo szybko zapełnić klientowi cache.
BTW2: Po co się tak rozpisywać:
[PHP]function loadFile() {
loading_file=new Image();
loading_file.src='http://free.of.pl/d/daroc/graphic/menu_top.gif?%27+Date();
loading_file.onload=function(){alert('OK')};
loading_file.onerror=function(){alert('BADFILE')};
}
onload=loadFile;[/PHP]