JavaScript in Perl ?
daniel fiene
- perl
Hallo,
ich habe eine Frage zu JavaScript im Zusammenhang mit Perl. Ich habe folgende HTML Seite die ich ausgeben möchte:
==================
(...)
print "Content-type: text/html\n\n";
print <<ENDEFIN;
<html><head><title>Yabboard Manager</title></head>
<body>
<body onload="navBarInit()" marginheight=0 marginwidth=0 LEFTMARGIN=0 TOPMARGIN=0 link="#fb5724"
alink="#fb5724" vlink="#fb5724">
<script language="JavaScript" src="navbar.js"></script>
<script language="JavaScript" src="dhtmllib.js"></script>
<script language="JavaScript" src="dfload.js"></script>
<br>
$content
<br><br><hr>
<font face="verdana" size="1" color="$maincolor"><b>Yabboard Manager</b>
Das funktioniert auch wunderbar, doch nur die <javascript> anweisungen werden ignoriert! Wenn ich jetzt diesen Inhalt in einer HTML Datei im gleichen Verzeichnis abspeichere, dann wird das Java Script eingebunden. Wie kann ich also das JS einbinden ? (Ich muss es wohl auslagern, weil wenn ich es direkt in die cgi-file einbinde, gibt es einen 500er Internal Server Error).
<script language="JavaScript" src="navbar.js"></script>
<script language="JavaScript" src="dhtmllib.js"></script>
<script language="JavaScript" src="dfload.js"></script>
Das funktioniert auch wunderbar, doch nur die
<javascript> anweisungen werden ignoriert!
Von wem? Hast Du Dir den generierten Code mal im Browser
angesehen?
Wenn ich jetzt diesen Inhalt in einer HTML Datei im
gleichen Verzeichnis abspeichere, dann wird das Java
Script eingebunden.
Wie kann ich also das JS einbinden ? (Ich muss es
wohl auslagern, weil wenn ich es direkt in die
cgi-file einbinde, gibt es einen 500er Internal
Server Error).
Ich denke, alles funktioniert zunächst einmal genau so,
wie Du es haben willst.
Das CGI-Programm generiert ein HTML-Dokument, der
Browser findet darin JavaScript-Code, isoliert die URLs
und schickt weitere HTTP-requests zum Webserver, um
diese Dateien nachzuladen. So weit, so gut.
Aber jetzt beginnt das Problem. Denn die URLs für die
JavaScript-Dokumente, die Du nachgeladen haben willst,
scheinen im selben Verzeichnis zu liegen wie Deine
CGI-Anwendung!
Der Webserver dürfte allerdings so konfiguriert sein,
daß *alles*, was in diesem Verzeichnis liegt, als CGI-
Anwendung interpretiert wird. Er versucht also, diese
JavaScript-Dateien *auszuführen*, statt ihren Inhalt an
den Browser zu schicken. Damit hat er nun leider keinen
durchschlagenden Erfolg. ;-)
Und das löst den 500er-Server-Error aus.
Ich würde an Deiner Stelle den JavaScript-Code direkt
im CGI-Perl-Skript generieren. (Der Übersichtlichkeit
halber in separaten Perl-Modulen.)
Die zweitbeste Lösung wäre es m. E., diese JavaScript-
Dateien in ein anderes Verzeichnis zu verlagern, welches
vom Webserver nicht als CGI-Verzeichnis interpretiert
wird.
Ich würde an Deiner Stelle den JavaScript-Code direkt
im CGI-Perl-Skript generieren. (Der Übersichtlichkeit
halber in separaten Perl-Modulen.)Die zweitbeste Lösung wäre es m. E., diese JavaScript-
Dateien in ein anderes Verzeichnis zu verlagern, welches
vom Webserver nicht als CGI-Verzeichnis interpretiert
wird.
Das Problem ist ganz simpel: di .js Dateinen liegen irgendwo in einem Verzeichnis. Von einer .html-datei werden diese mittels eines relativen verweises ohne probleme gefunden.
wenn man mittels cgi eine seite generiert, beziehen sind jedoch alle verweise (bilder, links, usw.) relativ zur adresse des cgi-scripts.
die lösung: beim generieren des html-codes fügst du
<base href="adresse des html-files"> ein, und alles läuft wunderbar!
andernfalls muß du den absoluten pfad der javascript files angeben.
viel spaß!