Geri.R: Javascript schon während des Ladens der Seite starten

Hallo,

ich erzeuge dynamisch über CGI(Perl-Script) eine HTML-Seite. Zuerst wird eine Javascript-Funktion geschickt, die sofort ausgeführt werden soll (neues Fenster öffnen z.B.), während das Perl-Script noch läuft.
Das Script braucht relativ lange, um den restlichen Teil der Seite zu liefern.

Das Problem ist, dass das Javascript erst beginnt, wenn die Seite vollständig geladen ist.

Damit das JavaScript sofort ausgeführt wird, habe ich auch schon probiert ohne "function ...()":

<script language="JavaScript">
<!---
var win;
win = open ("", "Info", "width=300 height=150 dependent=yes");
win.document.write ("bla-bla-bla......");
--->
</script>

Grüße, Geri

  1. hi!

    versuch mal in einen tag, der bereits ausgegeben wurde (z.b. img) ein onLoad="function();" zu machen

    vielleicht geht das, weil der ruft dass soweit ich weiss definietiev auf, wen das objekt geladen wurde

    philipp

  2. Hallo Geri,

    könnte es vielleicht an dem Syntaxfehler liegen, wo der NN bes. empfindlich ist?

    --->
    ^
    </script>

    MfG
    Hartmut R.

  3. Hallo,

    ich erzeuge dynamisch über CGI(Perl-Script) eine HTML-Seite. Zuerst wird eine Javascript-Funktion geschickt, die sofort ausgeführt werden soll (neues Fenster öffnen z.B.), während das Perl-Script noch läuft.
    Das Script braucht relativ lange, um den restlichen Teil der Seite zu liefern.

    Das Problem ist, dass das Javascript erst beginnt, wenn die Seite vollständig geladen ist.

    Damit das JavaScript sofort ausgeführt wird, habe ich auch schon probiert ohne "function ...()":

    <script language="JavaScript">
    <!---
    var win;
    win = open ("", "Info", "width=300 height=150 dependent=yes");
    win.document.write ("bla-bla-bla......");
    --->
    </script>

    Grüße, Geri

    Dein Problem ist nicht, das Javascript bei unvollständigen Seiten aufzurufen. Dein Problem ist, daß Perl erst nach dem Ende des Skriptes überhaupt die komplette erzeugte Seite an den Browser sendet.  Bzw. daß der Webserver es nicht früher tut.

    Lösungsmöglichkeiten:

    1. Du machst eine Vorschaltseite, die sowohl das neue Fenster, als auch das Script aufruft. Javascript mit onLoad, und Scriptaufruf z.B. mit Meta-Refresh.

    2. Du benennst dein Script um in nph-SCRIPTNAME. Zumindest beim Apache-Webserver älterer Versionen wird dann das Zwischenspeichern der Seite (und die Verzögerung) ausgeschaltet. nph steht ungefähr für "non parsed header" oder so.

    3. Du schaltest die Ausgabepufferung aus. Bringt aber bei der falschen Apache-Version nichts, wenn der Dateiname nicht mit "nph-" anfängt.

    Resultate: Du kannst mit Version 2 und 3 schöne Fortschritts-Effekte generieren, wenn du vernünftiges HTML sendest (also keine Tabellen, die werden erst gezeigt, wenn sie komplett übertragen wurden).

    Javascript wird dann ausgeführt (natürlich mit Ausnahme von Funktionen), wenn der Browser es empfangen hat. Genau deshalb wird es ja meist im HEAD-Bereich notiert, damit die Funktionen für die Seite auf jeden Fall schon bekannt sind, bevor irgendwas von der Seite angezeigt wird und möglicherweise Javascript aufruft. Das erklärt auch, warum es den onLoad-Handler gibt, der erst dann aufgerufen wird, wenn die Seite komplett geladen wurde: Anders kann durch Javascript nicht festgestellt werden, ob die Seite komplett ist.

    - Sven Rautenberg

    1. Noch eine kleine Ergänzung: Das Skript ist (weil es ja non-parsed header ist) komplett für die Erstellung eines korrekten HTTP-Headers zuständig:

      print "HTTP/1.0 200 Okay\n";
      print "Content-type: text/html\n\n";

      irgendwo am Anfang als erste Ausgabe vor allem anderen.

      - Sven Rautenberg