Externe Scripts - Typ und Timing
Johannes Bohnacker
- javascript
Externe Javascripts funktionieren bei mir am zuverlässigsten, wenn im Script-Tag der HTML-Seite keine type-Angabe, also keine MIME-Vorgabe, eingetragen wird, denn sonst stürzt Netscape 3 sowohl unter Windows wie auch MacOS regelmäßig ab. Auf dem Server muss als MIME-Typ "application/x-javascript" eingetragen sein.
Ein Problem habe ich aber doch:
In einer externen JS-Datei ist eine Funktion definiert. Diese wird von einer anderen Funktion aufgerufen, die sich in einem weiteren Script direkt auf der HTML-Seite befindet. Dieser zweite Script befindet sich in einem Script-Tag unterhalb des Script-Tags, das die Einbindung der externen js-Datei festlegt. Die Funktion im internen Script wird vom onLoad()-Event aufgerufen. Hierbei kommt es unter MSIE gelegentlich zur Fehlermeldung, dass die Funktion, die in der externen js-Datei enthalten ist, nicht definiert sei. Dies passiert vor allem, wenn der Browser-Cache vorher leer ist, also gehe ich von einem Timing-Problem aus.
Eigentlich stelle ich mir den Ablauf ja so vor: Der Browser liest den HTML-Code von oben nach unten ein. Scripts werden hierbei ebenfalls eingelesen, wobei Funktionen definiert und direkte Instruktionen ausgeführt werden. Taucht hierbei ein Script-Tag mit einer Referenz zu einer externen js-Datei auf, so wird diese eingelesen und bearbeitet, vor es mit dem nächsten Tag weitergeht. Der onLoad-Handler wird aufgerufen, wenn die gesamte HTML-Seite geladen ist. Zu diesem Zeitpunkt müssten auch alle externen Javascripts geladen sein. Offenbar trifft das aber nicht immer zu. Was ist zu tun?
Hm. Soeben habe ich entdeckt, dass es konkreten Fall noch einen Programmierfehler von mir gab, der die Fehlermeldung verursacht hat. Ich werde für die betroffene Site daher jetzt die Freigabe einholen und sie mit der externen js-Datei launchen.
Da ich aber ähnliches auch schon in anderen Situationen erlebt habe, würde micht schon interessieren, ob jemand Infos zum Timing bei externen js-Dateien beisteuern kann.
Hm. Soeben habe ich entdeckt, dass es konkreten Fall noch einen Programmierfehler von mir gab, der die Fehlermeldung verursacht hat. Ich werde für die
...
Hallo Johannes,
also ich binde externe JavaScripts (in diesem Beispiel nur eines, aber es geht genauso mit mehreren) immer nach folgendem Schema ein und hatte damit noch nie Probleme, allerdings probiere ich es nur auf neueren Browsern aus ...
Probleme könnte es evtl. geben, wenn allgemeine Variablen (also nicht innerhalb von Funktionen) in den Scripts mehrfach deklariert werden ...
Gruß Frankie
...
<head>
<title>Startseite ...</title>
<script language="JavaScript" src="../scripts/cursor.js">
<!-- Frankie's Javascript : Animierter Cursor
//-- end script -->
</script>
</head>
(... die Funktionen setup(), etc. sind in der externen Datei definiert ...)
<body background="../back/b_ast.gif" bgcolor="#102070" text="Black" link="Green" vlink="Teal" alink="Lime"
onload="setup(); startup(); BEWEGUNG()" onresize="setup()">
ob jemand Infos zum Timing bei externen js-Dateien beisteuern kann.
kann ich nicht.
aber zum Aufruf von Funktionen, die eventuell noch nicht da sind, kann ich Dir meine Methode schreiben:
angenommen function1() ist die Fkt. im externen script, so setze ich onLoad="delayedF1()"
und
function delayedF1()
{
if(function1) function1
else setTimeout("delayedF1()",100)
}
also einfach so lang aufrufen, bis sie da ist.
lg til