Unbemerkter Seitenaufbau
Jonny
- browser
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
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?
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
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...
Moin moin
print <<EOT
<html>
<head>
EOTprint <<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
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.
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
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.
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
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!
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
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.
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®
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
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®
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 ;-)
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
Mathias,
Da haste wohl Perlen vor die Säue geworfen. https://forum.selfhtml.org/?t=87869&m=523057
Gunnar
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?