Externe Javascript-Sourcen im Body
Jörg Peschke
- javascript
0 Dieter Raber0 wahsaga
Hallo,
Ich möchte gerne eine externe JavaScript-Datei im Body der HTML-Datei einbinden - geht sowas?
Das Ding muss erst ab einem DOM-fähigen Browser laufen (selbiges prüfe ich vorher per Browser-Weiche), also
IE>=5 und Netscape >= 6
Hintergrund: Das JavaScript soll erst geladen werden, wenn verschiedene andere Elemente des Bodys geladen wurden.
Meine ersten Tests mit IE6, NS6, NS6.1 und NS6.2 waren erfolgreich, und auch rein technisch wüsste ich nicht, was dagegen sprechen sollte (da ich ja Inline-JavaScript auch im Body definieren kann) - aber vielleicht weiss ja jemand von Browsern, wo sowas stress macht (beliebt ist da ja z.B. Mac IE oder Safari *g*)
Viele Gruesse,
Joerg
Hallo Jörg,
Ich möchte gerne eine externe JavaScript-Datei im Body der HTML-Datei einbinden - geht sowas?
ja, genauso wie im Head mit <script src="" type="text/javscript"></script>
Das Ding muss erst ab einem DOM-fähigen Browser laufen (selbiges prüfe ich vorher per Browser-Weiche),
siehe hierzu auch http://dcljs.de/faq/antwort.php?Antwort=browser_ermitteln
Gruß,
Dieter
Hallo,
Das Ding muss erst ab einem DOM-fähigen Browser laufen (selbiges prüfe ich vorher per Browser-Weiche),
siehe hierzu auch http://dcljs.de/faq/antwort.php?Antwort=browser_ermitteln
Ähm? Abgesehen davon, dass solche »Browserabfragen« stets unnötig sind, wenn man DOM-Fähigkeiten benutzen will, ist diese nicht einmal effektiv, da gibt es geradlinigere Möglichkeiten:
ie = ( (document.all)
&& (window.offscreenBuffering) ) ? true : false;
if (document.defaultCharset) z.B. (oder offscreenBuffering reicht aus)
nn = ( (document.captureEvents)
&& (!document.getElementById) ) ? true : false;
if (document.layers)
mz = ( (document.getElementById)
&& (!document.all)
&& (document.documentElement) ) ? true : false;
if (window.ChromeWindow)
op = ( (document.getElementById)
&& (navigator.userAgent.indexOf('Opera') != -1) ) ? true : false;
if (window.opera)
Mathias
Hallo,
Bei mir reicht i.d.Regel ein
if (document.getElementById)...
liegt aber daran, dass ich noch viel mit innerHTML usw. mache, und wenig das "echte Dom" (mit createElement usw.) benutze.
Hi,
Bei mir reicht i.d.Regel ein
if (document.getElementById)...
liegt aber daran, dass ich noch viel mit innerHTML usw. mache, und wenig das "echte Dom" (mit createElement usw.) benutze.
Das *ist* die Abfrage fürs "echte DOM"! Da innerHTML (zumindest theoretisch) nicht dazugehört, müßte man (theoretisch) die Existenz von innerHTML separat abfragen (praktisch kann es aber jeder DOM-2-Browser).
Gruß, Cybaer
Hallo Cybaer,
... müßte man (theoretisch) die Existenz von innerHTML separat abfragen (praktisch kann es aber jeder DOM-2-Browser).
leider nein. Ich hatte einen Fall, da ergab die Abfrage, dass der Browser DOM und innerHTML kennt. Beim Einsatz von innerHTML mit DOM ist der Browser dann aber abgestürtzt. Es handelte sich um den IE unter MacOS 9 und X.
Gruß, Jürgen
Hi,
leider nein. Ich hatte einen Fall, da ergab die Abfrage, dass der Browser DOM und innerHTML kennt. Beim Einsatz von innerHTML mit DOM ist der Browser dann aber abgestürtzt. Es handelte sich um den IE unter MacOS 9 und X.
Vorher wurde die Existenz von innerHTML explizit unter dem W3C-DOM abfragt - und dabei schon abgestürzt?
Fragt sich noch, inwieweit es sich nicht einfach um einen Bug handelt? War es die letzte IE-Version für Mac?
Gruß, Cybaer
Hallo Cybaer,
Vorher wurde die Existenz von innerHTML explizit unter dem W3C-DOM abfragt - und dabei schon abgestürzt?
Ja! Siehe z.B. http://www.j-berkemeier.de/TableSort_so_geht_es.html
Fragt sich noch, inwieweit es sich nicht einfach um einen Bug handelt? War es die letzte IE-Version für Mac?
Es ist wohl ein Bug. (Siehe auch http://www.quirksmode.org/. Da im MacOS die IEs ja noch älter sind, glaube ich, es war der neueste. Ich habe keinen Mac und bin per Mail von einem Besucher auf das Problem hingewiesen worden. Ich prüfe jetzt zusätzlich den navigator.userAgent auf das vorkommen von MAC und IE. Das ist zwar nicht 100%ig sicher, aber die meisten MAC-IE-User werden den userAgent nicht verändern.
Gruß, Jürgen
Hi,
Ja! Siehe z.B. http://www.j-berkemeier.de/TableSort_so_geht_es.html
Aha, also nicht beim Auslesen, sondern "nur" beim Beschreiben?!
Es ist wohl ein Bug. (Siehe auch http://www.quirksmode.org/.
Also wie die älteren Operas diesbezüglich ebenfalls: Schrottreif. ;->
Gruß, Cybaer
Hallo Cybaer,
Aha, also nicht beim Auslesen, sondern "nur" beim Beschreiben?!
das habe ich nicht mehr so genau getestet, aber es werden Tabellenfelder mit innerHTML gelesen und beschrieben.
Also wie die älteren Operas diesbezüglich ebenfalls: Schrottreif. ;->
nur gibt es noch recht viele MACs mit OS9 oder älter und die MAC-User hängen an ihren alten Maschinen. Außerdem basteln/installieren sie eher wenig an ihren Rechnern herum. Die alten MAC-IEs werden uns daher noch einige Zeit erhalten bleiben und müssen daher auch irgendwie berücksichtigt werden, und sei es nur ein "alert("Leider unterstützt ihr Browser nicht die notwendigen Methoden.")"
Gruß, Jürgen
Hi,
das habe ich nicht mehr so genau getestet, aber es werden Tabellenfelder mit innerHTML gelesen und beschrieben.
Ja, aber diesbezügliche Warnungen stehen im Source nur dort, wo geschrieben wird, nicht am Anfang, wo gelesen wird. :-)
S. z.B. mein DHTML-Ticker4All: Dort wird innerHTML nur verwendet, wenn der Browser es im W3C-DOM kennt. Kennt er es nicht, wird halt über Knoten gelesen und geschrieben.
Würde mich mal interessieren, wie der Mac-IE hier reagiert.
Mal sehen, ob "mein" Grafiker noch 'nen IE auf der Platte hat ... ;)
Die alten MAC-IEs werden uns daher noch einige Zeit erhalten bleiben und müssen daher auch irgendwie berücksichtigt werden, und sei es nur ein "alert("Leider unterstützt ihr Browser nicht die notwendigen Methoden.")"
BTW: Eine passende Abfrage wäre hier vielleicht auf navigator.cpuClass! Wenn das Objekt existiert und der Inhalt "68K" oder "PPC" ist, dann ist's ein Mac-IE (zumindest solange nicht andere Browserhersteller dieses Objekt auch noch einführen =;-)).
Gruß, Cybaer
hi,
Hintergrund: Das JavaScript soll erst geladen werden, wenn verschiedene andere Elemente des Bodys geladen wurden.
warum ist das nötig?
wäre es nicht egal, wann es _geladen_ wird - so lange es erst dann _ausgeführt_ wird, wenn die notwendigen elemente vorhanden sind?
gruß,
wahsaga
hallo,
warum ist das nötig?
Das einzubindendende JavaScript wird vermutlich etwas groesser werden. Deswegen soll der User erstmal was von der Seite sehen, wenn dann schon ein bisschen was da ist, und man sich die Seite schonmal begucken kann, kann das JavaScript im Hintergrund vor sich hinrödeln.
Viele Gruesse,
Jörg