grab: Javascript setInterval auf Mac geht nicht

folgende Funktion geht auf dem PC einwandfrei. Auf dem Mac allerdings wird die von setInterval aufgerufene Funktion nicht ausgeführt. Jemand ne Lösung?? hier das script

function loadPicture (file) {
 tarfile = file;
 im = new Image();
 im.src = tarfile;
 intV = setInterval(checkPicture,10);
}

function checkPicture () {
 alert("v1"); // wird nicht aufgerufen
 if (im.height > 0) {
  clearInterval(intV);
  alert(im.height);

}
}

  1. Hallo grab

    folgende Funktion geht auf dem PC einwandfrei. Auf dem Mac allerdings wird die von setInterval aufgerufene Funktion nicht ausgeführt. Jemand ne Lösung?? hier das script

    Es gibt das Event onload.

    function loadPicture (file) {
    tarfile = file;
    im = new Image();

    im.onload = function () { alert(this.src + ' fertig');};

    im.src = tarfile;
    intV = setInterval(checkPicture,10);
    }

    Du solltest auch keine globalen Variabeln verwenden sowas kann in's Auge gehen - alle Variabeln mit var deklarieren.

    Struppi.

    1. klappt so nicht, komme aus dem Flash-Bereich, deswegen hab ichs mal so geschrieben

      function loadPicture (file) {
       var im = new Image();
       im.onLoad = function () {
        buildWindow(file,this);
       }
       im.src = tarfile;
      }

      function buildWindow (file,im) {
       alert("bin da"); // wird nicht ausgeführt
      }

      1. klappt so nicht, komme aus dem Flash-Bereich, deswegen hab ichs mal so geschrieben

        im.onLoad = function () {

        Das habe ich auch so nicht geschrieben. JS ist case sensitive im gegensatz zu HTML.

        Struppi.

        1. function loadPicture (file) {
           var tfile = file;
           var im = new Image();
           im.onload = buildWindow(tfile,im);
           im.src = tarfile;
          }

          function buildWindow (file,im) {
           alert(im.height); // ausgabe 0

          }

          habs jetzt so und er gibt mir 0 zurück ?????

          1. function loadPicture (file) {
             var tfile = file;
             var im = new Image();
             im.onload = buildWindow(tfile,im);
             im.src = tarfile;
            }

            function buildWindow (file,im) {
             alert(im.height); // ausgabe 0

            }

            habs jetzt so und er gibt mir 0 zurück ?????

            Auch das schrieb ich nicht.

            du musst onload bzw. onerror eine Funktionreferenz zuweisen, da oben weißt du dem event den Rückgabewert der Funktion buildWindow zu (der ist undefiniert).

            Struppi.

            1. function loadPicture (file) {

              var im = new Image();
               im.tfile = file;

              im.onload = function () {
                buildWindow(this.tfile,this);
               }
               im.src = file;

              }
              so gibt er mir auch 0 zurück ?????

              1. so gibt er mir auch 0 zurück ?????

                Was da jetzt falsch ist weiß ich nicht, bei mir funktioniet das
                http://home.arcor.de/struebig/js/test/testOnload.htm

                Struppi.

                1. liegts vielleicht doch am Mac, dein Beispiel geht bei mir auch nicht....

  2. Hi,

    intV = setInterval(checkPicture,10);

    Sieht das so aus, wie es in selfHTL bei setInterval beschrieben steht? Ich denke nicht ... =;-)

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde habe ihre Freizeit geopfert, um Dir zu helfen. Helfe auch Anderen: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  3. Hi,

    intV = setInterval(checkPicture,10);

    Der erste Parameter von setInterval ist ein String, der das im Intervall auszuführende Script enthält.
    Bei Dir steht anstelle des Strings ein Funktionsobjekt, kein Funktionsaufruf (der hätte Klammern: checkPicture()).
    Und selbst wenn Du das zu
    intV = setInterval(checkPicture(),10);
    abänderst, dann müßte die Funktion checkPicture das im Intervall auszuführende Script zurückgeben.
    checkPicture() hat aber keinerlei Rückgabe.

    Soll etwa die Funktion checkPicture() im Intervall ausgeführt werden?
    Dann müßte das m.E. so aussehen:
    intV = setInterval("checkPicture()",10);
    sprich: ein String, der den Funktionsaufruf checkPicture() enthält.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. ok hab ich kappiert, funzt auch aber wie lösche ich das interval dann??

      function begin() {
      intV = window.setInterval("check()",100);
      }

      function check () {
      window.clearInterval(intV);
      }

      klappt nicht...

      1. hi,

        function begin() {
        intV = window.setInterval("check()",100);
        }

        wenn intV eine lokale variable innerhalb deiner funktion begin() ist,

        function check () {
        window.clearInterval(intV);
        }

        dann ist intV in check() natürlich nicht bekannt.

        lies in selfhtml über den unterschied zwischen lokalen und globalen variablen nach, oder vielleicht besser noch, arbeite mit funktionsparametern/-rückgabewerten.

        gruss,
        wahsaga

    2. Trotz allem muss man sagen, dass setInterval oder setTimeout völlig unbrauchbar sind um das laden eines Bildes zu überprüfen (was passiert, wenn der Server ausgefallen ist? endlosschleife).

      onload und onerror sind vorhanden und funktionieren auf fast allen Browsern.
      (nicht im IE 3 und älteren Operas)

      Struppi.

  4. intV = setInterval(checkPicture,10);

    Benutze keine Pfandhasy-Syntax.