Jonny: Unbemerkter Seitenaufbau

Hallo, ich habe da ein riesen Problem und hoffe ganz doll das mir jemand weiterhelfen kann... :-)

Seit einigen Wochen arbeite ich an einem Projekt, bei dem es zwingend notwendig ist, das sich die Seite, die aufgerufen wird, selbst alle 5 Sekunden aktuallisiert. Das habe ich auch erfolgreich mit dem Tag <meta http-equiv="refresh" content="5;URL=...> geschafft. Nun ist es genau hierbei besonders wichtig, das der Besucher dieser Seite (IE 6) den Aufbau der Seite nicht mitbekommt.

Beschreibung:

Hinter der Seite läuft ein kleines cgi-Script, welches die Daten für die Seite dynamisch zusammen sucht und dann als png wiedergibt. Da die Laufzeit des Scripts ca. 1-2 Sekunden dauert, bemerke ich die Verzögerung auf der Seite. Die Seite verschwindet und es erscheint der Ladehinweis unten im Browser während sich die Seite langsam aufbaut.

Meine Frage ist nun: wie kann ich dem Browser nun mitteilen, dass er solange mit dem Neuaufbau der Seite warten soll, bis er alle Daten erhalten hat? Der Seitenaufbau wäre dann so schnell, dass das kurze Blinken der Seite vom Besucher nicht bemerkt werden würde.

Wie könnte ich das Realisieren?

Für Hilfe wäre ich super dankbar.

Greez
Jonny

  1. Versuchs dochmal, indem du nach einiger Zeit deine Daten erst in einem Blindframe erzeugst und dann über die Daten in dein offenes Fenster rufst - dann müssten sie doch schon fertig geladen sein, oder?

    1. Sorry, was ist ein Blindframe? :-)
      Hier ist ein kleiner Ausschnitt meines cgi-Scripts, welches in einem iframe steckt.

      print <<EOT
      <html>
      <head>
      EOT

      print <<EOT
         <meta http-equiv="refresh" content="5;URL=...">
      EOT
      }

      print <<EOT
      </head>
      <body bgcolor="#000000" align=center>
         <div align=center>
         <img src="/cgi-bin/script.cgi?$argv">
         </div>
      </body>
      </html>
      EOT

      1. Also - ich meinte sowas wie n Frame, aber halt ohne Breite - einfach keinen Raum einräumen - und da das dann reinpacken ... die Sachen kannste ja darin laden - Platz auf dem Bildschirm brauchste ja nur zum Anzeigen...

      2. Moin moin

        print <<EOT
        <html>
        <head>
        EOT

        print <<EOT
           <meta http-equiv="refresh" content="5;URL=...">
        EOT
        }

        print <<EOT
        </head>
        <body bgcolor="#000000" align=center>
           <div align=center>
           <img src="/cgi-bin/script.cgi?$argv">
           </div>
        </body>
        </html>
        EOT

        Schau mal in SELFHTML nach, um eine Antwort auf deine Frage zu finden!

        Entschuldige bitte, aber hierbei handelt es sich nicht wirklich um html - wenn das wirklich so aus der Original-Seite kommt, dann solltest du mal mit dem HTML-Grundgerüst anfangen.

        Ein paar Stichworte: Wie wäre es mal mit ein paar Anführungszeichen? DOCTYPE-Angabe, Zeichensatz, Seitentitel - oder was das nur ein Ausschnitt?

        Und immer schön validieren (http://validator.w3c.org)

        Gruß,
        Marc.

        --
        sh:( fo:| ch:? rl:? br:> n4:& ie:% mo:} va:} de:] zu:) fl:( ss:| ls: js:(
        http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A%28+fo%3A%7C+ch%3A%3F+rl%3A%3F+br%3A%3E+n4%3A%26+ie%3A%25+mo%3A%7D+va%3A%7D+de%3A%5D+zu%3A%29+fl%3A%28+ss%3A%7C+ls%3A+js%3A%28
        1. Hi,

          Entschuldige bitte, aber hierbei handelt es sich nicht wirklich um html

          nein, aber um Perl - welches wirkliches HTML erzeugt, vom fehlenden DOCTYPE und <title> abgesehen. Grundsätzlich hast Du natürlich ...

          Und immer schön validieren (http://validator.w3c.org)

          ... völlig Recht.

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. Moin moin

            Entschuldige bitte, aber hierbei handelt es sich nicht wirklich um html

            nein, aber um Perl - welches wirkliches HTML erzeugt,

            Sorry, wenn ich für Verwirrung gesorgt habe: ich meinte nur die Ausgabe des PERL-Skriptes, da...

            vom fehlenden DOCTYPE und <title> abgesehen. Grundsätzlich hast Du natürlich

            ...so etwas kein valides HTML ausgibt - habe ich wohl um eine Ecke zu viel gedacht, wenn nicht einmal Du verstanden hast, was ich meinte... :-)

            Gruß,
            Marc.

            --
            Und immer schön
            validieren (http://validator.w3c.org)
            sh:( fo:| ch:? rl:? br:> n4:& ie:% mo:} va:} de:] zu:) fl:( ss:| ls: js:(
            http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A%28+fo%3A%7C+ch%3A%3F+rl%3A%3F+br%3A%3E+n4%3A%26+ie%3A%25+mo%3A%7D+va%3A%7D+de%3A%5D+zu%3A%29+fl%3A%28+ss%3A%7C+ls%3A+js%3A%28
            1. Hi,

              habe ich wohl um eine Ecke zu viel gedacht, wenn nicht einmal Du verstanden hast, was ich meinte... :-)

              oder ich habe untypischerweise mit zu wenigen Ecken gerechnet ;-)

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
              1. leute was solln der scheiss? klugscheisser kann ich schonmal garnicht leiden! ihr kennt weder die umgebung noch den hintergrund meines scripts! beantwortet doch einfach meine frage und wenn ihr nicht weiterhelfen könnt dann stöbert woanders rum!

                1. leute was solln der scheiss? klugscheisser kann ich schonmal garnicht leiden! ihr kennt weder die umgebung noch den hintergrund meines scripts! beantwortet doch einfach meine frage und wenn ihr nicht weiterhelfen könnt dann stöbert woanders rum!

                  Wenn Du so schlau bist dann frag doch nicht so viel dämliches Zeug..
                  ToMIRL

                  1. Ja meine Frage ist so dämlich wie ihr, da es bisher noch keiner geschafft hat darauf zu antworten! bla bla bla...

                    Beitrag beendet! Ich such mir ein besseres Forum, wo nicht soviele KLUGSCHEISSER ihre Zeit vertreiben.

                    1. Moin!

                      Ja meine Frage ist so dämlich wie ihr, da es bisher noch keiner geschafft hat darauf zu antworten!

                      Du hast nicht verstanden, dass wir Deine Frage nicht beantworten _wollten_. Das ist ein großer Unterschied zu "nicht geschafft".

                      Und da wir so "Klugscheisser" sind, kannst Du annehmen, wir haben unsere Gründe. Ein fachliches Problem sehe ich bei keinem von denen deren Antwort Dir nicht gefallen hat. Ich sehe aber ein, dass wir Dir vielleicht die erheblichen Nachteile Deines Vorhabens nicht nahegebracht haben. Da Du dies aber nicht mehr lesen wirst brauche ich jetzt darauf nicht eingehen.

                      MFFG (Mit freundlich- friedfertigem Grinsen)

                      fastix®

                      --
                      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. Hi,

    Seit einigen Wochen arbeite ich an einem Projekt, bei dem es zwingend notwendig ist, das sich die Seite, die aufgerufen wird, selbst alle 5 Sekunden aktuallisiert. [...] Nun ist es genau hierbei besonders wichtig, das der Besucher dieser Seite (IE 6) den Aufbau der Seite nicht mitbekommt.

    Du hast offenbar einen schwerwiegenden Konzeptfehler; eine solche Vorgabe widerspricht den Grundprinzipien von HTTP. Vielleicht solltest Du also die Ursache korrigieren, anstatt an den Symptomen herumzudoktorn.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Moin!

      Du hast offenbar einen schwerwiegenden Konzeptfehler; eine solche Vorgabe widerspricht den Grundprinzipien von HTTP.

      Wieso? Ich hab gehört mit mit
      <meta http-equiv="refresh" content="0.04;URL=http://www.suberserver.de/film.pl">
      will das IOK die nächste Olympiade in einem 1600*1200 Pixel großen Popup übertragen.

      :)

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix®

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
      1. Hi fastix®,

        Ich hab gehört mit mit [...] will das IOK die nächste Olympiade in einem 1600*1200 Pixel großen Popup übertragen.

        korrekt, allerdings musst du deine Session-ID wohl per Einschreiben beantragen:

        http://www.einfach-fuer-alle.de/blog/index.php?id=P860

        Grüße,
         Roland ;-)

  3. Hallo,

    Seit einigen Wochen arbeite ich an einem Projekt, bei dem es zwingend notwendig ist, das sich die Seite, die aufgerufen wird, selbst alle 5 Sekunden aktuallisiert. Das habe ich auch erfolgreich mit dem Tag <meta http-equiv="refresh" content="5;URL=...> geschafft. Nun ist es genau hierbei besonders wichtig, das der Besucher dieser Seite (IE 6) den Aufbau der Seite nicht mitbekommt.

    Beschreibung:

    Hinter der Seite läuft ein kleines cgi-Script, welches die Daten für die Seite dynamisch zusammen sucht und dann als png wiedergibt. Da die Laufzeit des Scripts ca. 1-2 Sekunden dauert, bemerke ich die Verzögerung auf der Seite. Die Seite verschwindet und es erscheint der Ladehinweis unten im Browser während sich die Seite langsam aufbaut.

    Wenn ich dich richtig verstehe, ist der Hauptinhalt der Seite diese Grafik und beim Neuladen geht es vor allem darum, diese Grafik neu aufzubauen. Falls dies zutrifft, wäre möglicherweise JavaScript ein passendes Hilfsmittel, mit den bekannten Nachteilen freilich. Du könntest durch einen Timer alle fünf Sekunden eine Funktion starten, welche ein Image-Objekt erzeugt. Als src gibst du diesem Objekt die Adresse des CGI-Scripts, was das PNG-Bild ausgibt. Damit der Browser nicht zwischenspeichert, hängst du den aktuellen Unix-Timestamp im Query-String an. Mit dieser Zuweisung startet der Browser eine Abfrage und holt sich das Bild vom Server. Nach 1-2 Sekunden liefert der Browser selbiges zurück. Dann kannst du dem Bild auf der Seite die src zuweisen, die das Image-Objekt hat. Dazu arbeitest du mit dem Event onload des Image-Objekts.

    Das könnte etwa so aussehen:

    <script type="text/javascript">
    wechsel_durch_complete=true;
    zeit_zwischen_perioden=4000;
    zeit_zwischen_completetests=300;
    function completewechsel () {
     if (!wechsel_durch_complete)
      return false;
     if (bild.complete) {
      document.getElementById('status').innerHTML='completewechsel: Setze Bild und aktiviere holebild-Timeout';
      document.images['bild'].src=bild.src;
      durch_complete_geaendert=true;
      holebild_timeout=window.setTimeout('holebild()', zeit_zwischen_perioden);
     } else {
      durchlaeufe_completewechsel++;
      document.getElementById('status').innerHTML='completewechsel: Bild noch nicht complete ('+durchlaeufe_completewechsel+'. Test), aktiviere completewechsel-Timeout';
      completewechsel_timeout=window.setTimeout('completewechsel()', zeit_zwischen_completetests);
     }
    }
    function onloadwechsel () {
     if (durch_complete_geaendert)
      return false;
     wechsel_durch_complete=false;
     window.clearTimeout(completewechsel_timeout);
     document.getElementById('status').innerHTML='onloadwechsel: Setze Bild und aktiviere Timeout';
     document.images['bild'].src=bild.src;
     holebild_timeout=window.setTimeout('holebild()', zeit_zwischen_perioden);
    }
    function holebild (form) {
     document.getElementById('status').innerHTML='Hole neues Bild und aktiviere onload / completewechsel-Timeout';
     bild=new Image();
     bild.src='/cgi-bin/script.cgi?'+new Date().getTime();
     bild.onload=onloadwechsel;
     durch_complete_geaendert=false;
     if (wechsel_durch_complete) {
      durchlaeufe_completewechsel=0;
      completewechsel_timeout=window.setTimeout('completewechsel()', zeit_zwischen_completetests);
     }

    }
    holebild_timeout=window.setTimeout('holebild()', zeit_zwischen_perioden);

    </script>

    <div id="status">Status</div>
    <p><img src="bild.png" width="640" height="480" name="bild" id="bild"></p>

    Nicht alle Browser unterstützen den onload-Event, daher lässt sich in denen mit complete arbeiten. Die Funktion completewechsel() überprüft alle x Millisekunden, ob das Bild schon fertig geladen ist. Dann wird das Bild durch das neue ersetzt. Wenn onload gefeuert wird, wird Die Funktion onloadwechsel() ausgeführt, die den completewechsel()-Wiederholzyklus abbricht und das Bild aktualisiert. Bei weiteren holebild()-Durchläufen wird dann nur noch der onload gestartet.

    Mathias

    1. Mathias,
      Da haste wohl Perlen vor die Säue geworfen. https://forum.selfhtml.org/?t=87869&m=523057
      Gunnar

      --
      "(Der Student) kann sich so völlig dem hingeben, was er naiv für die Computerwissenschaft hält, also der bloßen Verfeinerung seiner Programmiertechniken, daß er sich auf diese Weise effektiv daran hindert, etwas wirklich Wesentliches zu studieren."
      (Joseph Weizenbaum in "Die Macht der Computer und die Ohnmacht der Vernunft")
    2. Super! Genau soetwas habe ich gebraucht!

      Ich hatte mir schon gedanken über die Funktion onload gemacht, nur wusste ich nicht, ob es das richtige ist!

      Mein ziel ist es, so eine Art real time Liniengrafik (Rechnerlast) mit dem GD::Graph zu erzeugen und dabei wäre ein Blinken und Warten alle 5 Sekunden sehr schlecht. Ich werde das mal einbauen und schauen ob es klappt... dankeschön :-)

      Aber da fällt mir noch ein. Ein Kollege von mir erzählte mir, dass es eine Funktion für den Meta-Tag gibt, die dem Browser mitteilt "warte bis alle Daten da sind, dann baue neu auf" oder so ähnlich. Ich habe nichts derartiges gefunden. Hast du eine Idee?