Stefan Muenz: +(PERL) JavaScript via CGI-Script dynamisch generieren

Liebe Forumer,

ein treuer Leser von SELFHTML hat mir heute einen interessanten Trick gemailt, den vielleicht noch nicht jeder kennt. Interessant ist das vor allem, wenn man kein SSI hat.

In einer HTML-Datei einfach den typischen Befehl zum Einbinden einer externen JavaScript-Datei notieren, allerdings mit einer kleinen Abweichung im src-Attribut:

<script language="JavaScript" src="cgi-bin/datei.pl">          
</script>

Dadurch wird in einer HTTP-Umgebung das Perlscript ausgefuehrt. Dieses muss mit dem einleitenden HTTP-Header-Befehl:
print "Content-type: text/javascript\n\n";
JavaScript-Code an den Browser senden, also etwa Anweisungen wie:
print "document.write("Ein $Skalar");\n";

Ausprobiert hab ich's jetzt nicht ... aber der Mailschreiber hat mir versichert, dass er auf diese Weise die Ausgabe einer Zugriffsstatistik seiner Webseiten realisiert hat.

viele Gruesse
  Stefan Muenz

  1. hi,

    <script language="JavaScript" src="cgi-bin/datei.pl">          
    [..] Zugriffsstatistik seiner Webseiten realisiert hat.

    hmm, wenn ich mir das recht ueberlege, hat der Kollege dann eine Zugriffsstatistik, die alle User mit eingeschaltetem Javascript erfasst .-))

    cua

    n.d.p.

  2. Hi,

    In einer HTML-Datei einfach den typischen Befehl zum Einbinden einer externen JavaScript-Datei notieren, allerdings mit einer kleinen Abweichung im src-Attribut:

    Du meinst sowas wie in <../../sfarchiv/1999_2/t03903.htm#a18873>? ;-)

    print "Content-type: text/javascript\n\n";

    application/x-javascript habe ich seinerzeit irgendwo als gültig herausgefunden. Wenn text/javascript auch funktioniert, liegt das vermutlich daran, daß der MIME-Type nicht wirklich beachtet wird ;-)

    Ausprobiert hab ich's jetzt nicht ... aber der Mailschreiber hat mir versichert, dass er auf diese Weise die Ausgabe einer Zugriffsstatistik seiner Webseiten realisiert hat.

    Doch, da hat er schon recht mit.

    Cheatah

    1. Hi hi!

      Du meinst sowas wie in <../../sfarchiv/1999_2/t03903.htm#a18873>? ;-)

      Ja, der Trick ist schon wahnsinnig neu... ;-)

      print "Content-type: text/javascript\n\n";
      application/x-javascript habe ich seinerzeit irgendwo als gültig herausgefunden. Wenn text/javascript auch funktioniert, liegt das vermutlich daran, daß der MIME-Type nicht wirklich beachtet wird ;-)

      Siehe <../../sfarchiv/1999_2/t02866.htm>. NS 3 *braucht* application/x-javascript, den spaeteren Browsern ist es egal.

      Ausprobiert hab ich's jetzt nicht ... aber der Mailschreiber hat mir versichert, dass er auf diese Weise die Ausgabe einer Zugriffsstatistik seiner Webseiten realisiert hat.

      Und ich einen einfachen Textcounter. War sozusagen mein Perl-Debuet, also mein erstes kleines Scriptchen (man findet meine Anfaengerfragen dazu sicher noch irgendwo im Archiv). Oh je, wenn ich den Code heute ansehe... Aber n.d. hat recht, zaehlt natuerlich nur die Besucher mit angeschaltetem JS1.1 (externe JS erst ab NS3 und IE4).

      So long

  3. Ausprobiert hab ich's jetzt nicht ... aber

    es funzt !!!

    test.pl

    #!perl.exe

    print "Content-type: text/javascript\n\n";
    print <<"EOT";
          function doit()
          {
             alert("Hello World");
          }
    EOT

    test.html

    <html>
    <head>
    <title>Untitled</title>
        
    <script language="JavaScript" src="http://localhost/autoselfhtml/test.pl">          
    </script>
    </head>

    <body>
    <button name="but" onClick="doit()">Do it !!!</button>
    </body>
    </html>

    Bye
    Timothy

    P.S. nur so als Schnellschuß!!!

  4. Hallo Stefan,

    ein treuer Leser von SELFHTML hat mir heute einen interessanten Trick gemailt, den vielleicht noch nicht jeder kennt. Interessant ist das vor allem, wenn man kein SSI hat.

    interessanter Provider, der SSI sperrt und CGI freischaltet ...

    mfG - Michael

    1. Hi,

      interessanter Provider, der SSI sperrt und CGI freischaltet ...

      kommt IMHO öfter vor als umgekehrt. SSI hat vermutlich einen leichten "erweitertes CGI"-Flair, zumal man damit auch Scripts starten kann - von der Syntax her.

      Wie sinnig das ist, sei mal dahingestellt :-)

      Cheatah

      1. Hi,

        interessanter Provider, der SSI sperrt und CGI freischaltet ...
        kommt IMHO öfter vor als umgekehrt. SSI hat vermutlich einen leichten "erweitertes CGI"-Flair, zumal man damit auch Scripts starten kann - von der Syntax her.

        bitte verbreite nicht auch noch Du diesen Unfug ... nein, mit defensivem SSI alleine kann man keine CGIs starten. Nur mit SSI-EXEC.

        Michael

  5. Sup!

    Ich frage mich wirklich, warum der Validator <script language="JavaScript">

    auf dieser Seite

    http://validator.w3.org/check?uri=http%3A%2F%2Fwww.asemann.de%2Fclan%2Flaunch.html

    okay findet (XHTML)

    und auf dieser (HTML 4.01)

    http://validator.w3.org/check?uri=http%3A%2F%2Fwww.asemann.de%2Fclan%2Fnexusclan.html

    nicht... wenn ich das durch <script type="text/javascript"> ersetze, wird es ein Fehler weniger, wenn ich mich recht erinnere.

    Ist nicht HTML 4.01 Untermenge von XHTML?
    Oder habe ich gerade was uebersehen?

    Grüsse,

    Bio

    1. hallo!

      du verwendest "HTML 4.01 Strict", soweit ich weiß, sind ort keine scriptbereiche erlaubt. hast du es schonmal mit "HTML 4.01 Transitional" versucht?

      random

    2. Hallo Bio,

      Ist nicht HTML 4.01 Untermenge von XHTML?
      Oder habe ich gerade was uebersehen?

      HTML ist keine untermenge von XHTML sondern lediglich von SGML.
      XHTML ist eine Untermenge von XML was eine untermenge von SGML ist.

      Tschüs

      Daniel