Erst HTML laden, dann bestimmtes Javascript
Christian
- javascript
0 XaraX0 Jörg Peschke
Hallo zusammen,
bin ein ziemlicher Neuling was Javascript angeht. Ich lade momentan in meinem HTML-Site über ein Javascript Banner von meinem Admanager-System phpAdsNew ein. Klappt auch super, nur leider baut sich deshalb die Seite sehr langsam auf, da er erst die Banner lädt und dann den Content.
Nun meine Frage: Was kann ich tun, damit erst alles eingeladen wird und dann erst das Javascript "angefasst" wird (vielleicht mit einer Zeitangabe oder Reihenfolgenangabe?)? Das Javascript ist dort in mein HTML integriert wo später auch die Banner ausgegeben werden. Ich habe schon alles mit onLoad etc. ausprobiert.
Wäre für Tipps dankbar!
Christian
Javascript sieht wie folgt aus:
<script language='JavaScript1.1' type='text/javascript'>
<!--
if (!document.phpAds_used) document.phpAds_used = ',';
document.write ("<" + "script language='JavaScript' type='text/javascript' src='");
document.write ("http://www.mein-server.de/admanage/adjs.php?n=a99f4a0b");
document.write ("&what=zone:1&target=_blank&withText=1");
document.write ("&exclude=" + document.phpAds_used);
if (document.referer)
document.write ("&referer=" + escape(document.referer));
document.write ("'><" + "/script>");
//-->
</script>
Hallo Christian,
Du hast mit dem Event-Handler onLoad() die Möglichkeit das Laden der Seite abzuwarten, jedoch bestimmt dies nur das Laden der Seite - nicht der Bilder! Also wird es immer ein paar Probleme geben, die sich auch durch den Einbauen von window.setTimeout() nicht gänzlich regeln lassen.
Als nächstes solltest Du Dich noch mit node, dessen Methoden und Eigenschaften vertraut machen und per Event und/oder window.setTimeout() ein Bild-Knoten erzeugen und in das Dokument einhängen. Dazu kannst Du eine ID vorgeben und mit document.getElementById() das Element, in dem das Bild (also der Banner samt erzeugtem Verweis) eingehangen werden soll, lokalisieren.
Parallel denke auch daran einen <noscript> einzufügen, damit der Banner zu sehen sein wird (tortz der angegebenen Prolematik), wenn JavaScript deaktiviert ist.
Gruß aus Berlin!
eddi
Hallo,
Nun meine Frage: Was kann ich tun, damit erst alles eingeladen wird und dann erst das Javascript "angefasst" wird (vielleicht mit einer Zeitangabe oder Reihenfolgenangabe?)? Das Javascript ist dort in mein HTML integriert wo später auch die Banner ausgegeben werden. Ich habe schon alles mit onLoad etc. ausprobiert.
Du könntest den Banner nicht mittels document.write sondern via innerHTML einfügen, und dass dann erst bei onLoad tun:
<body onLoad="showBanner()">
<div id="banner">
<!-- hier kommt später der banner_rein //-->
</div>
JavaScript:
function showBanner () {
if (!document.phpAds_used) document.phpAds_used = ',';
document.getElementById("banner").innerHTML = .... (hier steht alles, was sonst in deinem document.write steht)
}
(document.getElementById können nur die neueren Browser, wenn du ältere unterstützt (z.B. IE < 5, NS < 6) bräuchtest du noch ne entsprechende weiche)
Damit wird der Banner erst angezeigt wenn dein HTML geladen ist.
Wenn du allerdings willst, das auch alle Bilder geladen sind, bevor das Benner angezeigt wird, wirds etwas komplizierter :)
Viele Gruesse,
Joerg
Hi Jörg,
danke, aber irgendwie überfordert mich das schon bzw. vielleicht funktioniert es auch einfach nicht. Die Seite wird geladen, der Banner nicht aber eine Javascript-Fehlermeldung erhalte ich auch nicht.
Danke & Gruß
Christian
Mein Script nsieht wie folgt aus:
<BODY onLoad="showBanner()">
...
...
<div id="banner">
<script language='JavaScript' type='text/javascript'>
function showBanner () {
if (!document.phpAds_used) document.phpAds_used = ',';
document.getElementById("banner").innerHTML = phpAds_random.substring(2,11);
document.write ("<" + "script language='JavaScript' type='text/javascript' src='");
document.write ("http://www.travel-namibia.de/admanage/adjs.php?n=" + phpAds_random);
document.write ("&what=zone:1&target=_blank");
document.write ("&exclude=" + document.phpAds_used);
if (document.referer)
document.write ("&referer=" + escape(document.referer));
document.write ("'><" + "/script>");
</script>
</div>
Hallo,
Nun meine Frage: Was kann ich tun, damit erst alles eingeladen wird und dann erst das Javascript "angefasst" wird (vielleicht mit einer Zeitangabe oder Reihenfolgenangabe?)? Das Javascript ist dort in mein HTML integriert wo später auch die Banner ausgegeben werden. Ich habe schon alles mit onLoad etc. ausprobiert.
Du könntest den Banner nicht mittels document.write sondern via innerHTML einfügen, und dass dann erst bei onLoad tun:
<body onLoad="showBanner()">
<div id="banner">
<!-- hier kommt später der banner_rein //-->
</div>JavaScript:
function showBanner () {
if (!document.phpAds_used) document.phpAds_used = ',';
document.getElementById("banner").innerHTML = .... (hier steht alles, was sonst in deinem document.write steht)
}
(document.getElementById können nur die neueren Browser, wenn du ältere unterstützt (z.B. IE < 5, NS < 6) bräuchtest du noch ne entsprechende weiche)Damit wird der Banner erst angezeigt wenn dein HTML geladen ist.
Wenn du allerdings willst, das auch alle Bilder geladen sind, bevor das Benner angezeigt wird, wirds etwas komplizierter :)Viele Gruesse,
Joerg
Tach nochmal,
Du müsstest natürlich die anderen Sachen in den document writes auch ins innerhTML schreiben:
<head>
<script type="text/javascript">
<!--
function showBanner () {
if (!document.phpAds_used) document.phpAds_used = ',';
document.getElementById("banner").innerHTML = phpAds_random.substring(2,11);
document.getElementById("banner").innerHTML += "<" + "script language='JavaScript' type='text/javascript' src='";
document.getElementById("banner).innerHTML += "http://www.travel-namibia.de/admanage/adjs.php?n=" + phpAds_random;
document.getElementById("banner").innerHTML += "&what=zone:1&target=_blank";
document.getElementById("banner").innerHTML += "&exclude=" + document.phpAds_used;
if (document.referer)
document.getElementById("banner").innerHTML += "&referer=" + escape(document.referer);
document.getElementById("banner") += "'><" + "/script>";
//-->
</script>
<body onLoad="loadBanner">
... (sonstiger content vor dem, banner)
<div "banner"></div>
...
</body>
Allerdings muss ich gestehen, ich habe übersehen, dass dein Banner selbst aus einem JavaScript besteht was extern eingebunden wird.
Ich weiss nicht, ob das mitgeladen wird, wenn es nachträglich in dein Dokument eingehängt wird mittels innerHTML oder createNode, aber man könnt's mal probieren.