Hallo Stefan,
ich hatte dazu mal einige Versuche gemacht. Alles ohne Gewähr! Getestet mit FF3 und IE7. Vielleicht kann jemand ergänzen, wie das bei weiteren Browsern aussieht.
Wenn der Ereignis-Handler vor dem Beginn des Ladevorgangs gesetzt wird, dann werden die Ereignisse ausgelöst, unabhängig davon, ob sich das Bild im Cache befindet oder nicht.
Getestet: FF3; IE7
meinBild.onload = ... Ereignis-Handler
meinBild.onerror = ... Ereignis-Handler
meinBild.src = ... Ladevorgang
Wenn die Ereignis-Handler nach Beginn des Ladevorgangs gesetzt werden, gibt’s Probleme.
meinBild.src = ... Ladevorgang
meinBild.onload = ... Ereignis-Handler
meinBild.onerror = ... Ereignis-Handler
Für IE7 gilt.
Ist das Bild im Cache, wird das onload-Ereignis für dieses Bild nicht ausgelöst.
Für FF3 gilt: Das onload-Ereignis wird ausgelöst - auch wenn sich das Bild im Cache befindet.
Folgendes funktioniert im FF3 und IE7
if (meinBild.complete) {
bildGeladen(meinBild, "complete");
} else {
meinBild.onload = function() { bildGeladen(this, "onload"); };
meinBild.onerror = function() { bildGeladen(this, "onerror"); };
};
FF3 ist in bezug auf »complete« allerdings fehlerhaft.
Wenn ein Bild nicht geladen werden kann, dann ist - erwartungsgemäß - beim ersten Aufruf (leerer Cache; Strg+F5) »complete==false«, »onerror« wird ausgelöst.
Bei einem Refresh (F5) ist - wider Erwarten - bei dem fehlerhaften Bild »complete==true«.
Der IE7 verhält sich hier korrekt.
Gruß Uwe