Ergebnis 1 bis 13 von 13
  1. #1
    snowmanmh ist offline Grünschnabel
    registriert
    27-05-2008
    Beiträge
    5

    Question Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Hallo,

    ich habe ein js Script, das per Zufall aus einem Array in dem Werbungen hinterlegt sind, eine auswählt und als Layer einblendet. Das JS habe ich wie folgt eingebunden:

    Code:
    <script src="http://www.xyz/layer.js" type="text/javascript"></script>
    Das funktioniert auch soweit. Mein Problem ist aber, das der Layer direkt geladen wird, und dann die Hauptseite auf der das Script eingebunden ist, nicht weiter läd. Meist sehe ich nur den Hintergrund (obwohl im Quelltext der Seite alles da ist).

    Meine Vermutung ist, das dies mit dem document.write im layer.js zusammen hängt.

    Daher wollte ich das Script erst starten, wenn die eigentliche Seite geladen ist. Aus technischen Gründen, kann ich aber nicht auf Body onload zurückgreifen.

    Der Inhalt des Scripts:

    Code:
    // PP einstellen
    
    var pps=new Array();
    //Syntax: pps[x]=new Array("seite zum aufrufen","ziellink wenn n.tig",breite,hoehe);
    
    //Werbung1
    pps[0]=new Array("http://www.xyz.de/werbung1.html","http://www.xyz.de",600,400);
    //Werbung2
    pps[1]=new Array("http://www.xyz.de/werbung2.html","http://www.xyz.de",400,400);
    //Werbung3
    pps[2]=new Array("http://www.xyz.de/werbung3.html","http://www.xyz.de",480,200);
    
    // Ende Programme
    
    
    function getCookie(name){
       var i=0  //Suchposition im Cookie
       var suche = name+"="
       while (i<document.cookie.length){
          if (document.cookie.substring(i, i+suche.length)==suche){
             var ende = document.cookie.indexOf(";", i+suche.length)
             ende = (ende>-1) ? ende : document.cookie.length
             var cook = document.cookie.substring(i+suche.length, ende)
             return unescape(cook)
          }
          i++
       }
       return null
    }
    
    
    function setCookie(name, wert, domain, expires, path, secure){
            var cook = name+"="+unescape(wert)
            cook += (domain) ? "; domain="+ domain : ""
            cook += (expires) ? "; expires="+expires : ""
            cook += (path) ? "; path="+path : ""
            cook += (secure) ? "; secure":""
            document.cookie = cook
    }
    
    
    function moveLayerBack() {
    currentDeltaX=currentDeltaX-80;
    oLayer.style.left = startX+currentDeltaX+"px";
        if(startX+currentDeltaX > startX) {
        window.setTimeout("moveLayerBack()",1);
        }
    }
    
    
    function moveLayer() {
    currentDeltaX=currentDeltaX+40;
    oLayer.style.left = startX+currentDeltaX+"px";
        if(startX+currentDeltaX < endX) {
        window.setTimeout("moveLayer()",1);
        }
    }
    
    
    function startMove(oMyLayer) {
    oLayer=oMyLayer;
    oLayer.onmouseover="";
    oLayer.onmouseout="";
    moveLayer();
    }
    
    function big(){
    window.open(pop,'n');
    document.getElementById('adv_content').onfocus=document.getElementById('adv_content').blur;
    oLayer.style.display="none"
    moveLayerBack()
    }
    
    function zuffi(Min,Max){
            return  Math.floor(Min+(Max-Min+1)*(Math.random()));
    }
    
    if(!getCookie("ads")){
            var date=new Date();
            var expires = new Date (date.getTime () + 60 * 60 * 1000);
            setCookie("ads", "1", null, expires.toGMTString())
    
            //var index=Math.floor(Math.random()*pps.length)
    
            var index=zuffi(0,pps.length-1)
            var url=pps[index][0];
            var pop=pps[index][1]||url;
            var width=pps[index][2];
            var height=pps[index][3];
            width=width||800;
            height=height||525;
            height=height+25;
    
    
            var moveLayerBackTimeout;
            var moveLayerTimeout;
            var oLayer;
            var startX=-850;
            var endX=20;
            var currentDeltaX=0;
    
    
      document.write("<style type='text/css'>#adv {font-family:arial;font-size:12px;background-color:ffffff;border:1px solid black;width:"+width+"px;height:"+height+"px;");
      document.write("position:absolute;top: 20px;left: -850px;overflow:hidden;}#adv a, #adv a:hover, #adv a:visited, #adv a:active {text-decoration:none;");
      document.write("color:black;font-weight:bold} .smallgrey { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: normal; color: #666666; }</style><div id='adv'>");
    
      ...gekürzt...
    
      //Inhalt Layer
      document.write("<iframe onfocus='big()' id=adv_content frameborder=0 scrolling='auto' width='100%' height='"+height+"' topmargin='0' ");
      document.write("leftmargin='0' target='_blank' src='"+url+"'></iframe></div></td></tr></table>");
      setTimeout('startMove(document.getElementById("adv"))',500);
    }
    Wie kann ich das umsetzen?

    Grüsse

  2. #2
    moepmoep ist offline Grünschnabel
    registriert
    27-05-2008
    Beiträge
    5

    AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    welche technischen gründe sollen das sein? ie8 beta? in dem falle: http://forum.jswelt.de/showthread.ph...475#post273475

  3. #3
    snowmanmh ist offline Grünschnabel
    registriert
    27-05-2008
    Beiträge
    5

    AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Hallo,

    danke für die Antwort.

    Nein nicht IE8 Beta. Das Problem ist, das die Zeile in der das .js eingebunden wird, duch einen Platzhalter in verschiedenen Templates eingebunden wird.

    Und das würde bedeuten, das ich im System ca. 60 Templates anpassen müsste.

    Grüsse Mario

  4. #4
    [-UFO-]Melkor ist offline Doppel-As
    registriert
    16-08-2006
    Beiträge
    141

    AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Wie wäre es denn damit, die ganze document.write() Befehle rauszunehmen und durch DOM-Manipulation zu ersetzen?

  5. #5
    snowmanmh ist offline Grünschnabel
    registriert
    27-05-2008
    Beiträge
    5

    AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Hallo [-UFO-]Melkor,

    kannst Du mir bitte kurz ein mini Beispiel geben, wie der Syntax dazu aussehen würde?

    Grüße Mario

  6. #6
    [-UFO-]Melkor ist offline Doppel-As
    registriert
    16-08-2006
    Beiträge
    141

    AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Ist jetzt nicht getestet, soviel Zeit bleibt mir vorm Fußballtraining nicht mehr, aber versuch mal folgendes:

    Lager die CSS-Datei aus und lade sie dann mit folgender Funktion nach:
    Code:
    function setCss(){
      //Nachladen im IE
      if(
        document.createStyleSheet
      )
      {
        document.createStyleSheet(cssLocation);
      }
      //Nachladen für Mozilla, Opera und Netscape
      else{
        var objStyle = document.createElement("style");
        var objText = document.createTextNode('@import url('+strCss+') screen;');
        objStyle.appendChild(objText);
        document.getElementsByTagName('body')[0].appendChild(objStyle);
      }
    }
    Bei dem Iframe würd ichs mal wie folgt probieren:
    HTML-Code:
    <div id="iframe"></div>
    Code:
    document.getElementById('iframe').innerHTML = "<iframe onfocus='big()' id=adv_content frameborder=0 scrolling='auto' width='100%' height='"+height+"' topmargin='0' leftmargin='0' target='_blank' src='"+url+"'></iframe>";

  7. #7
    snowmanmh ist offline Grünschnabel
    registriert
    27-05-2008
    Beiträge
    5

    AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Hallo [-UFO-]Melkor,

    nochmals danke für Deine Antwort!

    Ich habe jetzt geschlagene 2 Stunden versucht, Deinen Tipp umzusetzen, komme aber auf kein Ergebniss. Kannst Du mir anhand meines Codes erklären, was genau ich machen muss?

    Ich habe mir die Funktion innerHTML etc. angesehen, bekomme den Code aber nicht funktionstüchtig... Ich habe den Code mal ungekürzt gelassen.


    Code:
    if(!getCookie("ads")){
    	var date=new Date();
    	var expires = new Date (date.getTime () + 60 * 60 * 1000);
    	setCookie("ads", "1", null, expires.toGMTString())
    
    	//var index=Math.floor(Math.random()*pps.length)
    
    	var index=zuffi(0,pps.length-1)
    	var url=pps[index][0];
    	var pop=pps[index][1]||url;
    	var width=pps[index][2];
    	var height=pps[index][3];
    	width=width||800;
    	height=height||525;
    	height=height+25;
    
    
    	var moveLayerBackTimeout;
    	var moveLayerTimeout;
    	var oLayer;
    	var startX=-850;
    	var endX=20;
    	var currentDeltaX=0;
    
      document.write("<style type='text/css'>#adv {font-family:arial;font-size:12px;background-color:ffffff;border:1px solid black;width:"+width+"px;height:"+height+"px;");
      document.write("position:absolute;top: 20px;left: -850px;overflow:hidden;}#adv a, #adv a:hover, #adv a:visited, #adv a:active {text-decoration:none;");
      document.write("color:black;font-weight:bold} .smallgrey { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: normal; color: #666666; }</style><div id='adv'>");
      
      document.write("<table width='100%' border='0' cellspacing='0' cellpadding='0'><tr>");
      document.write("<td><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr width='100%'><td height='25' bgcolor='#F3F4F8' class='smallgrey' style='padding-left:10px;'>xyz.com</td>");
      document.write("<td width='20' align='center' valign='middle' bgcolor='#F3F4F8'><a href='javascript:big()'><img name='' src='http://www.xyz.com/werbung/images/up2.gif' width='15' height='15' border='0' alt='Vollbild'></a></td>");
      document.write("<td width='20' align='center' valign='middle' bgcolor='#F3F4F8'><a href='javascript:moveLayerBack()'><img name='' src='http://www.xyz.com/werbung/images/close2.gif' width='15' height='15' border='0' alt='schlie&szlig;en'></a></td></tr>");
      document.write("</table></td></tr><tr><td>");
      
      //Inhalt Layer
      document.write("<iframe onfocus='big()' id=adv_content frameborder=0 scrolling='auto' width='100%' height='"+height+"' topmargin='0' "); 
      document.write("leftmargin='0' target='_blank' src='"+url+"'></iframe></div></td></tr></table>");
      setTimeout('startMove(document.getElementById("adv"))',5000);  
      
    }
    Grüsse Mario

  8. #8
    [-UFO-]Melkor ist offline Doppel-As
    registriert
    16-08-2006
    Beiträge
    141

    AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Habe das ganze mal umgeschrieben, sollte soweit laufen:
    HTML-Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
        <head>
            <title>twoBirds Prototype</title>
            <meta name="description" content="jswelt" />
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <meta http-equiv="expires" content="Sat, 01 Dec 2001 00:00:00 GMT" />
            <meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
            <meta http-equiv="Pragma" content="no-cache" />
            <script src="./jswelt.js" type="text/javascript"></script>
        </head>
        <body style="overflow-x:hidden;">
            <div id='test'>test</div>
            test
        </body>
    </html>
    Code:
    // PP einstellen
    
    var pps=new Array();
    //Syntax: pps[x]=new Array("seite zum aufrufen","ziellink wenn n.tig",breite,hoehe);
    
    //Werbung1
    pps[0]=new Array("http://www.xyz.de/werbung1.html","http://www.xyz.de",600,400);
    //Werbung2
    pps[1]=new Array("http://www.xyz.de/werbung2.html","http://www.xyz.de",400,400);
    //Werbung3
    pps[2]=new Array("http://www.xyz.de/werbung3.html","http://www.xyz.de",480,200);
    
    // Ende Programme
    
    
    function getCookie(name){
       var i=0  //Suchposition im Cookie
       var suche = name+"="
       while (i<document.cookie.length){
          if (document.cookie.substring(i, i+suche.length)==suche){
             var ende = document.cookie.indexOf(";", i+suche.length)
             ende = (ende>-1) ? ende : document.cookie.length
             var cook = document.cookie.substring(i+suche.length, ende)
             return unescape(cook)
          }
          i++
       }
       return null
    }
    
    
    function setCookie(name, wert, domain, expires, path, secure){
        var cook = name+"="+unescape(wert)
        cook += (domain) ? "; domain="+ domain : ""
        cook += (expires) ? "; expires="+expires : ""
        cook += (path) ? "; path="+path : ""
        cook += (secure) ? "; secure":""
        document.cookie = cook
    }
    
    
    function moveLayerBack() {
        currentDeltaX=currentDeltaX-80;
        oLayer.style.left = startX+currentDeltaX+"px";
        if(startX+currentDeltaX > startX) {
            window.setTimeout("moveLayerBack()",1);
        }
    }
    
    
    function moveLayer() {
        currentDeltaX=currentDeltaX+40;
        oLayer.style.left = startX+currentDeltaX+"px";
        if(
            startX + currentDeltaX < endX
        ){
            window.setTimeout("moveLayer()",1);
        }
    }
    
    
    function startMove(oMyLayer) {
        oLayer=oMyLayer;
        oLayer.onmouseover="";
        oLayer.onmouseout="";
        moveLayer();
    }
    
    function big(){
        window.open(pop,'n');
        document.getElementById('adv_content').onfocus=document.getElementById('adv_content').blur;
        oLayer.style.display="none";
        moveLayerBack();
    }
    
    function zuffi(Min,Max){
        return  Math.floor(Min+(Max-Min+1)*(Math.random()));
    }
    
    if(
        !getCookie("ads")
    ){
    	var date=new Date();
    	var expires = new Date (date.getTime () + 60 * 60 * 1000);
    	setCookie("ads", "1", null, expires.toGMTString())
    
    	var index=Math.floor(Math.random()*pps.length)
    
    	var index=zuffi(0,pps.length-1)
    	var url=pps[index][0];
    	var pop=pps[index][1]||url;
    	var width=pps[index][2];
    	var height=pps[index][3];
    	width=width||800;
    	height=height||525;
    	height=height+25;
    
    
    	var moveLayerBackTimeout;
    	var moveLayerTimeout;
    	var oLayer;
    	var startX=-850;
    	var endX=20;
    	var currentDeltaX=0;
    
        onload=setTimeout('start()', 200);
        
        function start(){
            var objStyle = document.createElement('style');
            var objType = document.createAttribute('type');
            objStyle.setAttributeNode(objType);
            var objText = document.createTextNode(
                "#adv {font-family:arial;font-size:12px;background-color:ffffff;border:1px solid black;width:"+width+"px;height:"+height+"px;"
                + "position:absolute;top: 20px;left: -850px;overflow:hidden;}#adv a, #adv a:hover, #adv a:visited, #adv a:active {text-decoration:none;"
                + "color:black;font-weight:bold} .smallgrey { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: normal; color: #666666; }</style>"
            );
            objStyle.appendChild(objText);
            document.getElementsByTagName('head')[0].appendChild(objStyle);
        
            document.getElementsByTagName('body')[0].innerHTML = "<div id='adv'><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr> <td><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr width='100%'><td height='25' bgcolor='#F3F4F8' class='smallgrey' style='padding-left:10px;'> <td>xyz.com</td> <td width='20' align='center' valign='middle' bgcolor='#F3F4F8'> <a href='javascript:big()'> <img name='' src='http://www.xyz.com/werbung/images/up2.gif' width='15' height='15' border='0' alt='Vollbild'></a></td> <td width='20' align='center' valign='middle' bgcolor='#F3F4F8'> <a href='javascript:moveLayerBack()'> <img name='' src='http://www.xyz.com/werbung/images/close2.gif' width='15' height='15' border='0' alt='schlie&szlig;en'></a></td></tr></table></td></tr><tr> <td><iframe onfocus='big()' id=adv_content frameborder=0 scrolling='auto' width='100%' height='"+height+"' topmargin='0' leftmargin='0' target='_blank' src='"+url+"'></iframe></td></tr></table></div>"
            + document.getElementsByTagName('body')[0].innerHTML;
            setTimeout('startMove(document.getElementById("adv"))',5000);
        }
    }
    Das Problem ist, dass wenn die JavaScript-Datei fertig mit Laden ist, noch kein Inhalt existiert, in den man die Werbung füllen kann. Dies habe ich hier mal versucht zu umgehen, indem ich einen Timeout gesetzt und dieser die Start-Funktion aufruft.
    Code:
    onload=setTimeout('start()', 200);
    Ob 200 ms in der Praxis reichen, weiß ich nicht, das müsstest du selbst ausprobieren. Falls mir noch ein besserer Weg einfällt, das Problem zu lösen, lasse ich es dich wissen. Mir schwant da was mit einer Funktion, die sich selbst aufruft, wenn der Body noch nicht geladen ist und ansonsten das ganze lädt, aber dafür ist es heut zu spät ^^

    Der auf jeden Fall sicherste Weg wäre es nach wie vor, im body ein onload zu definieren, aber das willst du ja nicht.

  9. #9
    [-UFO-]Melkor ist offline Doppel-As
    registriert
    16-08-2006
    Beiträge
    141

    AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Code:
    // PP einstellen
    
    var pps=new Array();
    //Syntax: pps[x]=new Array("seite zum aufrufen","ziellink wenn n.tig",breite,hoehe);
    
    //Werbung1
    pps[0]=new Array("http://www.xyz.de/werbung1.html","http://www.xyz.de",600,400);
    //Werbung2
    pps[1]=new Array("http://www.xyz.de/werbung2.html","http://www.xyz.de",400,400);
    //Werbung3
    pps[2]=new Array("http://www.xyz.de/werbung3.html","http://www.xyz.de",480,200);
    
    // Ende Programme
    
    
    function getCookie(name){
       var i=0  //Suchposition im Cookie
       var suche = name+"="
       while (i<document.cookie.length){
          if (document.cookie.substring(i, i+suche.length)==suche){
             var ende = document.cookie.indexOf(";", i+suche.length)
             ende = (ende>-1) ? ende : document.cookie.length
             var cook = document.cookie.substring(i+suche.length, ende)
             return unescape(cook)
          }
          i++
       }
       return null
    }
    
    
    function setCookie(name, wert, domain, expires, path, secure){
        var cook = name+"="+unescape(wert)
        cook += (domain) ? "; domain="+ domain : ""
        cook += (expires) ? "; expires="+expires : ""
        cook += (path) ? "; path="+path : ""
        cook += (secure) ? "; secure":""
        document.cookie = cook
    }
    
    
    function moveLayerBack() {
        currentDeltaX=currentDeltaX-80;
        oLayer.style.left = startX+currentDeltaX+"px";
        if(startX+currentDeltaX > startX) {
            window.setTimeout("moveLayerBack()",1);
        }
    }
    
    
    function moveLayer() {
        currentDeltaX=currentDeltaX+40;
        oLayer.style.left = startX+currentDeltaX+"px";
        if(
            startX + currentDeltaX < endX
        ){
            window.setTimeout("moveLayer()",1);
        }
    }
    
    
    function startMove(oMyLayer) {
        oLayer=oMyLayer;
        oLayer.onmouseover="";
        oLayer.onmouseout="";
        moveLayer();
    }
    
    function big(){
        window.open(pop,'n');
        document.getElementById('adv_content').onfocus=document.getElementById('adv_content').blur;
        oLayer.style.display="none";
        moveLayerBack();
    }
    
    function zuffi(Min,Max){
        return  Math.floor(Min+(Max-Min+1)*(Math.random()));
    }
    
    if(
        !getCookie("ads")
    ){
    	var date=new Date();
    	var expires = new Date (date.getTime () + 60 * 60 * 1000);
    	setCookie("ads", "1", null, expires.toGMTString())
    
    	var index=Math.floor(Math.random()*pps.length)
    
    	var index=zuffi(0,pps.length-1)
    	var url=pps[index][0];
    	var pop=pps[index][1]||url;
    	var width=pps[index][2];
    	var height=pps[index][3];
    	width=width||800;
    	height=height||525;
    	height=height+25;
    
    
    	var moveLayerBackTimeout;
    	var moveLayerTimeout;
    	var oLayer;
    	var startX=-850;
    	var endX=20;
    	var currentDeltaX=0;
        
        function startfunction(){
            if(
                document.getElementsByTagName('body').length > 0
            ){
            var objStyle = document.createElement('style');
            var objType = document.createAttribute('type');
            objStyle.setAttributeNode(objType);
            var objText = document.createTextNode(
                "#adv {font-family:arial;font-size:12px;background-color:ffffff;border:1px solid black;width:"+width+"px;height:"+height+"px;"
                + "position:absolute;top: 20px;left: -850px;overflow:hidden;}#adv a, #adv a:hover, #adv a:visited, #adv a:active {text-decoration:none;"
                + "color:black;font-weight:bold} .smallgrey { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: normal; color: #666666; }</style>"
            );
            objStyle.appendChild(objText);
            document.getElementsByTagName('head')[0].appendChild(objStyle);
        
            document.getElementsByTagName('body')[0].innerHTML = "<div id='adv'><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr> <td><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr width='100%'><td height='25' bgcolor='#F3F4F8' class='smallgrey' style='padding-left:10px;'> <td>xyz.com</td> <td width='20' align='center' valign='middle' bgcolor='#F3F4F8'> <a href='javascript:big()'> <img name='' src='http://www.xyz.com/werbung/images/up2.gif' width='15' height='15' border='0' alt='Vollbild'></a></td> <td width='20' align='center' valign='middle' bgcolor='#F3F4F8'> <a href='javascript:moveLayerBack()'> <img name='' src='http://www.xyz.com/werbung/images/close2.gif' width='15' height='15' border='0' alt='schlie&szlig;en'></a></td></tr></table></td></tr><tr> <td><iframe onfocus='big()' id=adv_content frameborder=0 scrolling='auto' width='100%' height='"+height+"' topmargin='0' leftmargin='0' target='_blank' src='"+url+"'></iframe></td></tr></table></div>"
                + document.getElementsByTagName('body')[0].innerHTML;
            
            setTimeout('startMove(document.getElementById("adv"))',5000);
            }
            else{
                setTimeout('startfunction()', 400);
            }
        }
        
        onload=setTimeout('startfunction()', 200);
    
    }
    Hier die aktualisierte Version. Es wird solange ein Timeout gesetzt, bis der body geladen ist, danach startet das Script.

  10. #10
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Zitat Zitat von [-UFO-]Melkor Beitrag anzeigen
    Code:
    onload=setTimeout('startfunction()', 200);
    Ich hab mir den Code nicht genauer angeschaut, aber diese Zeile ist Blödsinn. du weist hier window.onload den Rückgabewert der Funktion zu, was soll das bewirken?

    Ich nehme an du willst:
    PHP-Code:
    window.onload=startfunction
    Dann brauchst du auch nciht mehr auf document.body zu testen, das ist dann in der startfunktion 100%if vorhanden.

  11. #11
    [-UFO-]Melkor ist offline Doppel-As
    registriert
    16-08-2006
    Beiträge
    141

    AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Der Trick war mir noch nicht bekannt, man lernt halt immer dazu ^^

  12. #12
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Das ist kein Trick, sondern einfaches JS.

    Ein Eventhandler erwartet eine Funktionsreferenz, die bekommst du entweder über den Funktionsnamen ohne Klammer oder eine anonyme Funktion (oder mit new Function).

    D.h. du musst immer
    PHP-Code:
    [object].onevent = function(e) { .... }; 
    schreiben.

    Der Punkt dabei ist, wenn der Event eintritt (also gefeuert wird), wird die Funktion im Handler aufgerufen, in etwa so:
    PHP-Code:
    [object].onevent(e
    um das ganze noch zu verdeutlichen ein Beispiel:

    PHP-Code:
    var meineFunktion window.alert;
    meineFunktion('Hallo'); 

  13. #13
    snowmanmh ist offline Grünschnabel
    registriert
    27-05-2008
    Beiträge
    5

    Thumbs up AW: Externes Javascript erst laden wenn Seite komplett - ohne body onload

    Hallo,

    vielen Dank [-UFO-]Melkor!!!

    Du hast mir wirklich geholfen. Im IE gabs bei mir noch Probleme, daher habe ich das Script noch ein wenig umgebaut. Es funktioniert jetzt, beim FF "zuck" kurz die Seite weil der Layer eingeblendet und direkt ausgeblendet wird beim laden. Das ist aber zu vernachlässigen ...

    Noch mal 1000 Dank!

    Für alle die es interesiert, so siehts jetzt aus.

    Code:
    // PP einstellen
    var pps=new Array();
    //pps[x]=new Array("seite zum aufrufen","ziellink wenn n.tig",breite,hoehe);
    // Ende Programme
    
    function getCookie(name){
       var i=0  //Suchposition im Cookie
       var suche = name+"="
       while (i<document.cookie.length){
          if (document.cookie.substring(i, i+suche.length)==suche){
             var ende = document.cookie.indexOf(";", i+suche.length)
             ende = (ende>-1) ? ende : document.cookie.length
             var cook = document.cookie.substring(i+suche.length, ende)
             return unescape(cook)
          }
          i++
       }
       return null
    }
    
    
    function setCookie(name, wert, domain, expires, path, secure){
        var cook = name+"="+unescape(wert)
        cook += (domain) ? "; domain="+ domain : ""
        cook += (expires) ? "; expires="+expires : ""
        cook += (path) ? "; path="+path : ""
        cook += (secure) ? "; secure":""
        document.cookie = cook
    }
    
    
    function moveLayerBack() {
        currentDeltaX=currentDeltaX-80;
        oLayer.style.left = startX+currentDeltaX+"px";
        if(startX+currentDeltaX > startX) {
            window.setTimeout("moveLayerBack()",1);
        }
    }
    
    
    function moveLayer() {
        currentDeltaX=currentDeltaX+40;
        oLayer.style.left = startX+currentDeltaX+"px";
        if(
            startX + currentDeltaX < endX
        ){
            window.setTimeout("moveLayer()",1);
        }
    }
    
    
    function startMove(oMyLayer) {
        oLayer=oMyLayer;
        oLayer.onmouseover="";
        oLayer.onmouseout="";
        moveLayer();
    }
    
    function big(){
        window.open(pop,'n');
        document.getElementById('adv_content').onfocus=document.getElementById('adv_content').blur;
        oLayer.style.display="none";
        moveLayerBack();
    }
    
    function zuffi(Min,Max){
        return  Math.floor(Min+(Max-Min+1)*(Math.random()));
    }
    
    function setCss(){
      //Nachladen im IE
        if(document.createStyleSheet)
        {
        	document.createStyleSheet('http://www.xyz.com/werbung/css/werbung.css');
    	}
    	//Nachladen fr Mozilla, Opera und Netscape
    	else {
    	var objStyle = document.createElement("style");
    	var objText = document.createTextNode('@import url(http://www.xyz.com/werbung/css/werbung.css) screen;');
    	objStyle.appendChild(objText);
    	document.getElementsByTagName('body')[0].appendChild(objStyle);
    	}
    }
    
    if(
        !getCookie("ads")
    ){
    	var date=new Date();
    	var expires = new Date (date.getTime () + 60 * 60 * 1000);
    	setCookie("ads", "1", null, expires.toGMTString())
    
    	var index=Math.floor(Math.random()*pps.length)
    
    	var index=zuffi(0,pps.length-1)
    	var url=pps[index][0];
    	var pop=pps[index][1]||url;
    	var width=pps[index][2];
    	var height=pps[index][3];
    	width=width||800;
    	height=height||525;
    	height=height+25;
    
    
    	var moveLayerBackTimeout;
    	var moveLayerTimeout;
    	var oLayer;
    	var startX=-850;
    	var endX=20;
    	var currentDeltaX=0;
        
    function startfunction(){
            if(
                document.getElementsByTagName('body').length > 0
            ){
            //var objStyle = document.createElement('style');
            //var objType = document.createAttribute('type');
            //objStyle.setAttributeNode(objType);
            //var objText = document.createTextNode(
            //    "#adv {font-family:arial;font-size:12px;background-color:ffffff;border:1px solid black;width:"+width+"px;height:"+height+"px;"
            //    + "position:absolute;top: 20px;left: -850px;overflow:hidden;}#adv a, #adv a:hover, #adv a:visited, #adv a:active {text-decoration:none;"
            //    + "color:black;font-weight:bold} .smallgrey { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: normal; color: #666666; }</style>"
            //);
    	
            //objStyle.appendChild(objText);
            //document.getElementsByTagName('head')[0].appendChild(objStyle);
    	
    	setCss();
          
            document.getElementsByTagName('body')[0].innerHTML = "<div id='adv' style=\"width:"+width+"px;height:"+height+"px;\"><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr> <td><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr width='100%'><td height='25' bgcolor='#F3F4F8' class='smallgrey' style='padding-left:10px;'>Empfehlung:</td><td width='20' align='center' valign='middle' bgcolor='#F3F4F8'> <a href='javascript:big()'> <img name='' src='http://www.xyz.com/werbung/images/up2.gif' width='15' height='15' border='0' alt='Vollbild'></a></td> <td width='20' align='center' valign='middle' bgcolor='#F3F4F8'> <a href='javascript:moveLayerBack()'><img name='' src='http://www.xyz.com/werbung/images/close2.gif' width='15' height='15' border='0' alt='schlie&szlig;en'></a></td></tr></table></td></tr><tr> <td><iframe onfocus='big()' id=adv_content frameborder=0 scrolling='auto' width='100%' height='"+height+"' topmargin='0' leftmargin='0' target='_blank' src='"+url+"'></iframe></td></tr></table></div>"
            + document.getElementsByTagName('body')[0].innerHTML;
            
            setTimeout('startMove(document.getElementById("adv"))',5000);
            }
            else{
                setTimeout('startfunction()', 400);
            }
        }
        
        window.onload=startfunction;
    
    }
    Grüße Mario

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 07-03-2008, 12:19
  2. Iframe - Submit - komplett neue Seite Laden
    Von Darksoul im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 14-01-2008, 13:32
  3. Seite im iFrame laden
    Von Pilotxxl im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 06-06-2006, 12:56
  4. Seite nach 60 Sekunden neu laden
    Von onlineuser im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 30-05-2006, 12:23
  5. Seite automatisch in Frame laden (Problem)
    Von Oli im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 06-12-2000, 05:59

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •