Ole: dreh mich im kreis...bild cachen, timeout

moinmoin

ich dreh mich immo ein wenig im kreis und weiss nicht wie ich das problem anpacken soll.

  1. ich muss ein bild vorladen und nach 1 sekunde dann mit dem seitenaufbau beginnen.

  2. ich muss das bild ausgeben und die werte von hoehe und breite ermitteln

punkt 2 macht mir weniger sorgen, nur punkt 1 bereitet mir kopfzerbrechen. ich hab das schon mit settimeout probiert, allerdings mit dem ergebniss, das mir dann nur meine werte angezeigt wurden ohne den rest des seiteninhalts :(.
mag sein des meine beschränktheit und mangelnde auffassungsgabe am schlafmangel liegt, aber immo bin ich echt ratlos.

alles liebe
ole
(8-)>

ps: ergänzung zu 1) kann man ein vorgeladenes bild auf eine seite übergeben?

  1. Hallo Ole.

    1. ich muss ein bild vorladen und nach 1 sekunde dann mit dem seitenaufbau beginnen.

    Hmmm warum genau nach einer Sekunde??? Verstehe den Sinn nicht ganz.

    1. ich muss das bild ausgeben und die werte von hoehe und breite ermitteln

    punkt 2 macht mir weniger sorgen, nur punkt 1 bereitet mir kopfzerbrechen. ich hab das schon mit settimeout probiert, allerdings mit dem ergebniss, das mir dann nur meine werte angezeigt wurden ohne den rest des seiteninhalts :(.

    Wann ??? welche Werte ??? Hoehe und Breite ???

    ps: ergänzung zu 1) kann man ein vorgeladenes bild auf eine seite übergeben?

    Jo über den cache !! aber dein genaues Problem verstehe ich nicht. Sag doch mal einfach was du erreichen willst.

    Bis dann
    cu

    1. Hallo Ole.

      1. ich muss ein bild vorladen und nach 1 sekunde dann mit dem seitenaufbau beginnen.

      Hmmm warum genau nach einer Sekunde??? Verstehe den Sinn nicht ganz.

      1. ich muss das bild ausgeben und die werte von hoehe und breite ermitteln

      punkt 2 macht mir weniger sorgen, nur punkt 1 bereitet mir kopfzerbrechen. ich hab das schon mit settimeout probiert, allerdings mit dem ergebniss, das mir dann nur meine werte angezeigt wurden ohne den rest des seiteninhalts :(.

      Wann ??? welche Werte ??? Hoehe und Breite ???

      ps: ergänzung zu 1) kann man ein vorgeladenes bild auf eine seite übergeben?

      Jo über den cache !! aber dein genaues Problem verstehe ich nicht. Sag doch mal einfach was du erreichen willst.

      Bis dann
      cu

      1. hi

        Hmmm warum genau nach einer Sekunde??? Verstehe den Sinn nicht ganz.

        eine sekunde draum, weil javascript zu schnell ist für coldfusion, welches mir den link für das bild übergibt

        punkt 2 macht mir weniger sorgen, nur punkt 1 bereitet mir kopfzerbrechen. ich hab das schon mit settimeout probiert, allerdings mit dem ergebniss, das mir dann nur meine werte angezeigt wurden ohne den rest des seiteninhalts :(.

        Wann ??? welche Werte ??? Hoehe und Breite ???

        genau, die beiden werte brauche ich um eine textarea anzupassen, bekomme ich aber nicht auf einfachem wege, weil sonst das javascript ausgeführt wird bevor coldfusion die session-variable übergeben hat und ich somit nur 0 als wert bekomme.

        Jo über den cache !! aber dein genaues Problem verstehe ich nicht. Sag doch mal einfach was du erreichen willst.

        ich will erreichen, das das bild schon vorhanden ist wenn ich die breite und hoehe des bildes auslesen will und immo scheitert es an meinem mangelden JS wissen (und der mangelnden geschwindigkeit von CF) wie ich das realisieren kann.
        also habe ich mir gedacht, das ich das bild vorlade (auf einer eigenen seite) bevor ich auf die eigentliche seite springe auf der die werte ausgegeben werden sollen, oder aber die bilder auf der eigentlichen seite vorlade, eine zeitlang warte und dann erst den rest der seite angezeigt bekomme, inkl. der werte für breite und höhe.

        mein ansatz war folgendes:

        <cfoutput>
        <script language="javascript">
        bilda = new Image();
        bilda.src = "../_upload/images/#session.bild1#";
        bildb = new Image();
        bildb.src = "../_upload/images/#session.bild2#";

        document.write("<img src='" + bilda.src + "' name='bild1'>");
        document.write(document.bild1.width);
        </script>
        </cfoutput>

        das scheiterte aber daran das coldfusion langsamer als JS ist und somit die variabel nicht übergeben war als das script die werte auslesen wollte.

        der 2te versuch war folgender:

        <cfoutput>
        <script language="javascript">
        function.warten()
        {
        bilda = new Image();
        bilda.src = "../_upload/images/#session.bild1#";
        bildb = new Image();
        bildb.src = "../_upload/images/#session.bild2#";

        document.write("<img src='" + bilda.src + "' name='bild1'>");
        };

        settimeout("warten();",1000);

        document.write(document.bild1.width);
        </script>
        </cfoutput>

        (oder so ähnlich, das fertige script hab ich leider gefrustet gelöscht *grummel*)

        was dazu führte das ich zwar die richtigen werte angezeigt bekommen habe, allerdings nur diese werte, fein säuberlich auf weissem grund oben links in der ecke.

        dann habe ich versucht die bilder via eines body onload vorzuladen, was mangels schlaf und JS-verständniss nicht funktionierte, da ich mir überlegt hatte, das die zeit vom starten der seite bis zum ausführen des scripts vieleicht reichen würde...ich hab mich geirrt.

        und nun würd ichs gerne auf die oben geschilderte methode ausprobieren, damit dem script auf der ausführenden seite (der auf der die werte ausgelesen werden sollen) schon die bilder bekannt sind.

        hoffe ich hab nicht allzuviel unverständliches zeug geschrieben :)

        alles liebe
        ole
        (8-)>

        ps: für das andere posting möchte ich mich entschuldigen, bin auf RETURN gekommen.

        1. Holla

          Hmmm warum genau nach einer Sekunde??? Verstehe den Sinn nicht ganz.
          eine sekunde draum, weil javascript zu schnell ist für coldfusion, welches mir den link für das bild übergibt

          Geht mir überhaubt nicht in die Rübe was du da mit coldfusion machst. Ist doch für den Serverseitigen krahmms und was hat das alles mit JavaScript im Browser zu tun. Naja....

          Wann ??? welche Werte ??? Hoehe und Breite ???

          genau, die beiden werte brauche ich um eine textarea anzupassen, bekomme ich aber nicht auf einfachem wege, weil sonst das javascript ausgeführt wird bevor coldfusion die session-variable übergeben hat und ich somit nur 0 als wert bekomme.

          Was ??? Wie ??? Session-Variable !!! Was hat jetzt JavaScript damit zu tun ??? Arbeitest du mit Serverseitigem JavaScript ??? (Kann ja sein das es bei Coldfuzzie sowas gibt)

          ich will erreichen, das das bild schon vorhanden ist wenn ich die breite und hoehe des bildes auslesen will und

          also habe ich mir gedacht, das ich das bild vorlade (auf einer eigenen seite) bevor ich auf die eigentliche seite springe auf der die werte ausgegeben werden sollen, oder aber die bilder auf der eigentlichen seite vorlade, eine zeitlang warte und dann erst den rest der seite angezeigt bekomme, inkl. der werte für breite und höhe.

          Also willst du erreichen das die Werte für Hoehe und Breite des Bildes schon von Anfang an vorhanden sind , damit du damit arbeiten kannst. Und nicht erst nach dem kompletten laden!

          mein ansatz war folgendes:

          <cfoutput>
          <script language="javascript">
          bilda = new Image();
          bilda.src = "../_upload/images/#session.bild1#";
          bildb = new Image();
          bildb.src = "../_upload/images/#session.bild2#";

          document.write("<img src='" + bilda.src + "' name='bild1'>");
          document.write(document.bild1.width);
          </script>
          </cfoutput>

          das scheiterte aber daran das coldfusion langsamer als JS ist und somit die variabel nicht übergeben war als das script die werte auslesen wollte.

          Häääää !!!
          Also dein <cfoutput> schreibt den krahm in die HTML Datei welche ausgegeben werden soll. Dabei müssen zwei werte übergeben werden #session.bild1# und #session.bild2#. Bei einem Aufruf dieser Site durch einen Browser muss CF diese Werte übergeben und an den Browser senden. Keine Ahnung wie das mit CF ist aber dein JavaScript... wird doch nicht etwa von CF interpretiert. Ich denke mal es wird an den Browser gesendet oder ? (das wäre jetzt mal wichtig zu erfahren)

          der 2te versuch war folgender:

          <cfoutput>
          <script language="javascript">
          function.warten()
          {
          bilda = new Image();
          bilda.src = "../_upload/images/#session.bild1#";
          bildb = new Image();
          bildb.src = "../_upload/images/#session.bild2#";

          document.write("<img src='" + bilda.src + "' name='bild1'>");
          };

          settimeout("warten();",1000);

          document.write(document.bild1.width);
          </script>
          </cfoutput>

          dann habe ich versucht die bilder via eines body onload vorzuladen,

          Nööö geht nich!

          und nun würd ichs gerne auf die oben geschilderte methode ausprobieren, damit dem script auf der ausführenden seite (der auf der die werte ausgelesen werden sollen) schon die bilder bekannt sind.

          Ich gehe jetzt mal davon aus das alles mit dem JavaScript auf Browserseite funzen soll.

          Dann würde ich mit Frames arbeiten.
          Einen unsichtbaren(invi) Frame und einem sichtbaren(vi). Im invi werden die Bilder vorgeladen und ich ermittel die Höhe und Breite der Bilder wenn sie komplett geladen wurden. .... onload Event.

          Wurde die ganze Preload-prozedur abgeschlossen zeige ich im vi Frame eine neue Seite an, in der deine Scripte und Textarea und co vorhanden sind. Dort greife ich via Script auf die Parameter im invi Frame zu(Hoehe und Breite).

          Tarrraaaa

          Hmm sollte CF dein JavaScript Serverseitig interpretieren sieht das alles anders aus.

          hoffe ich hab nicht allzuviel unverständliches zeug geschrieben :)

          Leider doch!

          cu

          1. hi

            Also dein <cfoutput> schreibt den krahm in die HTML Datei welche ausgegeben werden soll. Dabei müssen zwei werte übergeben werden #session.bild1# und #session.bild2#. Bei einem Aufruf dieser Site durch einen Browser muss CF diese Werte übergeben und an den Browser senden. Keine Ahnung wie das mit CF ist aber dein JavaScript... wird doch nicht etwa von CF interpretiert. Ich denke mal es wird an den Browser gesendet oder ? (das wäre jetzt mal wichtig zu erfahren)

            Dann würde ich mit Frames arbeiten.
            Einen unsichtbaren(invi) Frame und einem sichtbaren(vi). Im invi werden die Bilder vorgeladen und ich ermittel die Höhe und Breite der Bilder wenn sie komplett geladen wurden. .... onload Event.

            Wurde die ganze Preload-prozedur abgeschlossen zeige ich im vi Frame eine neue Seite an, in der deine Scripte und Textarea und co vorhanden sind. Dort greife ich via Script auf die Parameter im invi Frame zu(Hoehe und Breite).

            also: coldfusion und javascript haben im prinzip nichts miteinander zu tun, da coldfusion halt auf dem server und js erst im browser ausgeführt werden.

            der <cfoutput>-tag muss vorhanden sein, damit platzhalter, die bei CF in # stehen, ersetzt werden können.

            in meinem falle dient es also nur dazu #session.bild1# durch den namen des bildes zur ersetzen, z.B. af340.jpg.

            das javscript wird sonst von cf nicht tangiert und hat somit beim aufruf statt der zeile
            bilda.src = "../_upload/images/#session.bild1#";
            eben
            bilda.src = "../_upload/images/af340.jpg";
            da stehen.

            da bild wird auch korrekt angezeigt, klappt aus irgendeinem unerfindlichen grund das auslesen der breite nicht unmittelbar nach dem einsetzen des bildes. folgende zeilen geben mir eben das richtige bild und eine breite von 0 aus

            document.write("<img src='" + bilda.src + "' name='bild1'>");
            document.write(document.bild1.width);

            rein optisch sieht der source-code den der user bekommt gleich aus, nämlich immer die zeile
            bilda.src = "../_upload/images/af340.jpg";
            alles was coldfusion ist, ist für den user eben unsichtbar, wie es sich für eine serverseitige sprache gehört ;).
            der einzige unterschied ist eben, das mit coldfusion die breite 0 und ohne die breite korrekt angezeigt wird.

            warte ich zwischen schreiben des bildes und auslesen der breite ca. 10ms dann hat auch das script mit coldfusion den richtigen werte für die breite, allerdings funktioniert das nciht nach meiner methode, da ich nach dem timout nutnoch den wert auf einer sonst leeren seite stehen habe.

            frames scheiden leider aus :(

            thx fürs bemühen.

            alles liebe
            ole
            (8-)>

            ps: auch die leute bei http://www.cfml.de bringe ich mit dem problem wohl zur verzweiflung *g*

            1. Hallo

              also: coldfusion und javascript haben im prinzip nichts miteinander zu tun, da coldfusion halt auf dem server und js erst im browser ausgeführt werden.

              Gut ! Fakt! Du hattest aber geschrieben, "Coldfusion ist zu langsam für JavaScript" ... "wenn CF die Sessionvariable übergeben hat". Das war nicht so gut...denn es hat ,wie du selber bemerkt hast, nichts miteinander zu tun.

              der <cfoutput>-tag muss vorhanden sein, damit platzhalter, die bei CF in # stehen, ersetzt werden können.

              in meinem falle dient es also nur dazu #session.bild1# durch den namen des bildes zur ersetzen, z.B. af340.jpg.

              das javscript wird sonst von cf nicht tangiert und hat somit beim aufruf statt der zeile
              bilda.src = "../_upload/images/#session.bild1#";
              eben
              bilda.src = "../_upload/images/af340.jpg";
              da stehen.

              Genau so sehe ich das auch!
              1.Du hast dein Coldfusion Script, ein HTMLDokument welches durch CF spezifische Tags für die Verarbeitung durch CF vorgesehen ist.

              2.Dieses CF-Script wird von CF verarbeitet und gibt ein HTML Dokument aus.

              3.Dieses HTML Dokument wird nun an den Browser gesendet.

              4.Der Browser verarbeitet dieses Dokument Zeile für Zeile.
              (Und lädt erst zu diesem Zeitpunkt irgendwelche Bilder)

              ------- Soweit erstmal der Teil ... nun weiter

              da bild wird auch korrekt angezeigt, klappt aus irgendeinem unerfindlichen grund das auslesen der breite nicht unmittelbar nach dem einsetzen des bildes. folgende zeilen geben mir eben das richtige bild und eine breite von 0 aus

              "...unmittelbar nach dem einsetzen des Bildes" ???
              a. Wenn du Coldfusion und dein CF-Script(siehe oben 1.) meinst... da wird kein Bild eingesetzt sondern nur ein Link(Verweis) zur Quelle des Bildes. Da aber dort gar kein JavaScript ausgeführt wird wirst du wohl eher...

              b.... Punkt 4. meinen. Und dabei spielt Coldfusion nicht mehr die geringste Rolle (in deinem Fall)!!!....

              document.write("<img src='" + bilda.src + "' name='bild1'>");
              document.write(document.bild1.width);

              rein optisch sieht der source-code den der user bekommt gleich aus, nämlich immer die zeile
              bilda.src = "../_upload/images/af340.jpg";
              alles was coldfusion ist, ist für den user eben unsichtbar, wie es sich für eine serverseitige sprache gehört ;).

              ..... und das bermerkst du ja fast richtig! es ist nicht unsichtbar, es existiert gar nicht mehr.(Ablauf Punkt 1. 2. 3.)

              der einzige unterschied ist eben, das mit coldfusion die breite 0 und ohne die breite korrekt angezeigt wird.

              Nein! nein! nix! nada! Coldfusion!

              warte ich zwischen schreiben des bildes und auslesen der breite ca. 10ms dann hat auch das script mit coldfusion den richtigen werte für die breite, allerdings funktioniert das nciht nach meiner methode, da ich nach dem timout nutnoch den wert auf einer sonst leeren seite stehen habe.

              Neeeeeiiiiiiiiiinnnnnn ! Coldfusion hat nie irgendwelche Werte für Hoehe und Breite.(nie) Nur einen Verweis(Link) auf die Quelle des Bildes. Durch diesen Verweis auf die Quelle des Bildes weiss der Browser von wo aus er das Bild laden soll.(Punkt 4)

              Um das Problem für dich selber zu lösen!!!! Lass Coldfusion mal ganz weg!!!!!!!!!

              Und nun dazu, was du eigentlich willst!!! Du möchtest die Werte eines Bildes (Hoehe und Breite) ermitteln.
              Grund ! Diese Werte sind dir nicht bekannt, weil dieses Bild dynamisch erzeugt wird oder was weiss ich...

              Diese Werte kannst du erst ermitteln wenn das Bild auch zur Verfügung steht. Das heißt, wenn es vollständig geladen wurde !!! Dann kann das kleine Browsermänchen erst messen, wie hoch oder breit es ist.

              Du hattest aber versucht die Werte schon zu ermitteln, als das Bild noch gar nicht geladen war. Dann wurden dir auch die richtigen Werte ausgegeben, nämlich 0 !!!

              Dann hast du es mit einem Timeout probiert um zu erreichen das die Werte ermittelt werden können wenn das Bild da ist.(10ms)
              Das geht auch nicht !!! Denn solange du das in deiner lokalen Rechnerumgebung machst funzt das vieleicht, aber auch nur solange der Datenzugriff schneller ist als der JavaScript Interpreter im Browser. Aber wenn jemand das Bild aus dem Netz lädt, kann das je nach Größe(KB) eine ungewisse Zeit dauern. (Anbindung, Netzlast etc.) Das fällt also weg!!!

              Du must sicherstellen, das jenes Bild auch vollständig zur Verfügung steht wenn du die Werte ermitteln willst. Dazu bietet sich das onload Event an. Dieses wird erst dann ausgelöst wenn das entsprechende Objekt verfügbar, existent ist(vollständig).

              Dann möchtest du diese Werte an das Dokument übergeben. Über writein() geht das aber nicht für ein schon bestehendes Dokument. Dazu musst du dich mit dynamischen HTML auseinandersetzen, wobei es unterschiedliche Lösungen für die unterschiedlichen Browsertypen gibt.

              Denn so wie du das gemacht hast wird einfach ein neues Dokument erstellt Write() und so erscheinen auf dieser Seite auch nur die Werte die du übergeben hast.

              Es gäbe da noch eine elegante Lösung, die hier auch schon öfters im Forum behandelt wurde, .... Frames !!!!

              aber du schreibst....

              frames scheiden leider aus :(

              So bleibt nur noch die Möglichkeit es über zwei unterschiedliche Seiten zu machen, mit Parameterübergabe in der URL (beschrieben in einem Feature Artikel)

              So das wars erstmal !!!

              Kommentar:
              Du hast hier eine ganze Menge durcheinander gewürfelt. Ich bezweifel das dein Lösungsweg mit dem Anpassen der Textarea überhaubt so funzt wie du dir das vorgestellt hast.
              Gerade wenn man als Anfänger mit den ersten komplizierten Strukturen zu tun hat, kann es helfen erstmal einen Aufbauplan(Konstruktions-Shema) zu erstellen. Was will ich erreichen? Und was soll auf jedem kleinen Schritt dahin passieren. So arbeite ich heute noch und es ist bei Java auch nicht wegzudenken.

              So wär die Frage vieleicht mit "Wie ermittel ich Hoehe und Breite eines Bildes Problem" schon etwas erfolgreicher.

              Viel Glück noch !!

              cu code2i

              1. nabend

                So wär die Frage vieleicht mit "Wie ermittel ich Hoehe und Breite eines Bildes Problem" schon etwas erfolgreicher.

                das ist ja auch kein problem mit javascript und wie ich es auch schon geschrieben habe mir ohne probleme geglückt.

                du schreibst, das coldfusion reinen html-code zurück gibt...klar tut es das und somit unterscheidet sich diese seite auch nicht von den seiten ohne coldfusion, wenn sie im browser verarbeitet werden.

                somit sind die beiden testseiten einmal mit

                <cfoutput>
                <script language="javascript">
                bilda = new Image();
                bilda.src = "../_upload/images/#session.bild1#";
                bildb = new Image();
                bildb.src = "../_upload/images/#session.bild2#";

                document.write("<img src='" + bilda.src + "' name='bild1'>");
                document.write(document.bild1.width);
                </script>
                </cfoutput>

                und einmal mit

                <script language="javascript">
                bilda = new Image();
                bilda.src = "../_upload/images/acf89.gif
                bildb = new Image();
                bildb.src = "../_upload/images/acf90.gif

                document.write("<img src='" + bilda.src + "' name='bild1'>");
                document.write(document.bild1.width);
                </script>

                bei der verarbeitung im browser identisch...rein vom sourcecode her.
                allerdings werden sie anscheinend unterschiedlich behandelt.

                zur abschließenden info: das ganze läuft nicht in einer kleinen entwicklungsumgebung, sondern unter "live" bedingungen. meine workstation bekommt die daten des servers via ISDN.

                anscheinend reden wir beide leider aneinander vorbei, trotzdem danke für die hilfe.

                alles liebe
                ole
                (8-)>