Jörg Peschke: Stack overflow im IE (mal wieder)

Hallo,
Ich habe ein Problem.
Mit einem Image-Preloader möchte ich nacheinander alle Bilder einer Seite laden. Er funktioniert eigentlich auch, ich kriege jedoch immer ein "Stack Overflow at line 0" unterm IE6. Mozilla macht keine Mucken. Der Code:

function loadNextImage(counter){
   if (counter >= IMAGES_TO_LOAD.length-1) {alert('Ready'); return;}
   PRELOADED_IMGS[counter] = new Image();
   if (counter < IMAGES_TO_LOAD.length -1) {
      PRELOADED_IMGS[counter].onload = function () {loadNextImage(counter+1);return(true);}
   }

PRELOADED_IMGS[counter].src = IMAGES_TO_LOAD[counter];
   return(true);
}

IMAGES_TO_LOAD ist dabei ein Array, das mit Dateinamen (insgesammt 23 Stück) befüllt ist. Dieses enthält auch tatsächlich bis zur letzten Stelle gültige Dateinamen.

Das wirklich lustige: Breche ich das Laden schon nach 13 Bildern ab, wenn ich also in der zweiten Zeile schreibe:
if (counter >= 13) {...}
kommt der Stack overflow nicht.

Schreibe ich dagegen
if (counter >= 14) {...}
kommt der Buffer overflow.

Kann sich da wer einen Reim drauf machen?

Bin für jede Hilfe dankbar.

Viele Grüße,
Jörg

  1. Привет Jörg.

    Ich habe ein Problem.

    Vielleicht dieses hier: http://www.heise.de/newsticker/meldung/53644?

    Дружба!
    Siechfred

    --
    »Sie kochten heimlich mit Wasser und tranken öffentlich Wein.«
    1. Hallo,

      Vielleicht dieses hier: http://www.heise.de/newsticker/meldung/53644?

      Danke für den Link. Mir ist aber trotzdem ein Rätsel, wie es zu lang-laufenden Schleifen in meinem Programmcode kommen konnte, offenbar hatte es aber irgendwas damit zu tun, dass der Browser zum Zeitpunkt des onload-events noch innerhalb der loadImg-Funktion des vorigen Bildes war.
      Ich habe das Problem jetzt so gelöst, dass ich vor jedem Bild kurz warte, bis ich das nächste lade (1 ms scheint bereits ausreichend zu sein):

      if (counter < IMAGES_TO_LOAD.length -1) {
            PRELOADED_IMGS[counter].onload = function () {window.setTimeout("loadNextImage("+eval(counter+1)+");", 1);}
         }

      Nicht im Sinne des Erfinders, aber scheint zu funktionieren :).

      Gruesse,
      Joerg