Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Web Design und Grafik (https://boardunity.de/web-design-grafik-f29.html)
-   -   Frage zu folgendem Code (https://boardunity.de/frage-folgendem-code-t5462.html)

Silmarillion 26.11.2007 12:50

Frage zu folgendem Code
 
Hallo zusammen,

werft doch mal bitte ein Auge (oder auch deren zwei ;) ) auf folgenden Code, welchen ich derzeit in der Navbar eingebaut habe.
Schließlich verzögern sich ab und an hierdurch die Ladezeiten...oder die Seite bleibt gar komplett hängen.
Logisch, dass ich jetzt Ursachenforschung betreibe...

PHP-Code:

<script language=javascript>
mpt = new Date();
mpts mpt.getTimezoneOffset() + mpt.getTime();
document.write('<script language="JavaScript" src="http://adfarm.mediaplex.com/ad/js/6730-42095-15056-2?rfr=xxxx&mpt=' mpts '&mpvc=" type="text/javascript"></scr' 'ipt>');
</script>
<noscript>
<a href="http://adfarm.mediaplex.com/ad/ck/6730-42095-15056-2?rfr=xxxx">
<img src="http://adfarm.mediaplex.com/ad/bn/6730-42095-15056-2?rfr=xxxx" alt="Click Here" border="0">
</a>
</noscript> 

Sind die Probleme jetzt eher codebedingt, oder serverbedingt (adfarm...) zu suchen?

mfg

Björn 26.11.2007 16:02

Musst dir lieber mal den Code anschaun den adfarm da einbindet. Kann ja sein, dass die Seite langsam ist oder da irgendeinen Hänger hat.
An dem Code hier liegts auf jeden Fall nicht.

Silmarillion 26.11.2007 17:00

Servus Björn,

meinst Du diesen Code:

Zitat:

<noscript>
<a href="http://adfarm.mediaplex.com/ad/ck/6730-42095-15056-2?rfr=xxxx">
<img src="http://adfarm.mediaplex.com/ad/bn/6730-42095-15056-2?rfr=xxxx" alt="Click Here" border="0">
</a>
</noscript>
Hmmm...gibt es vielleicht irgendwelche Programme/Möglichkeiten, mit/wie denen man derlei (mögliche) An-/Verbindungsprobleme überprüfen kann?

mfg

Björn 26.11.2007 17:32

Nein den hier:
Code:

document.write('<script language="JavaScript" src="http://adfarm.mediaplex.com/ad/js/6730-42095-15056-2?rfr=xxxx&mpt=' + mpts + '&mpvc=" type="text/javascript"></scr' + 'ipt>');
</script>

Der wartet ja im Prinzip auf den JavaScript Code von extern, und das kann hinauszögern.
MfG

Silmarillion 05.01.2008 08:58

Der Code bereitet, nach wie vor, Probleme. Naja, vielleicht ist es auch einfach nur der Adserver. Es nervt jedenfalls ungemein, wenn - nicht selten - die Seite nicht geladen bzw. nur der Header angezeigt wird.

Von daher meine Frage: besteht die Möglichkeit die Anzeige so zu regeln, dass die Seite selbst stets zuerst komplett geladen wird? Also unabhängig von der Ladezeit des Banners? (so das dieser quasi "nachlädt"...und notfalls einfach ein "rotes X" angezeigt wird)
Sollte doch irgendwie möglich sein!?

mfg

Patrick Gotthardt 05.01.2008 13:34

Na ja. Ich hab mir deren Code nicht angesehen und auch sonst nichts beachtet, aber ne grobe Idee wäre es, die Javascript-Datei per Ajax zu laden und dann via eval auszuführen. Müsstest du mal testen, ob das hilft. Ansonsten kannst du das einbinden der Datei immer noch per setTimeout/onload verzögern - falls dein Werbepartner das erlaubt (manche fordern, dass du deren Code verwenden musst - und zwar genau so und nicht anders).

Silmarillion 05.01.2008 19:02

Servus Patrick (Dich gibt`s noch? :eek: ;) ),

kann mit beiden Vorschlägen nicht wirklich was anfangen. Könntest Du das mal bitte genauer erklären? (Vorgehensweise) Danke.

mfg

Patrick Gotthardt 05.01.2008 20:34

Joa, bin selbst auch immer wieder erstaunt, dass ich noch existiere... ;)

Zu den Vorschlägen:
Das "onload"-Ereignis findet statt, wenn die Seite komplett geladen ist. Ich weiß allerdings nicht, ob externe Resourcen da auch schon geladen wurden. Wenn nicht bringt uns das wenig.
Jedenfalls könnte das so aussehen:
Code:

<html>
        <head id="head">
        <script type="text/javascript">
                function loadAds() {
                        var text = "";
                        var tmp = document.write;
                        document.write = function(msg) {
                                text += msg;
                        };
                        // now the printing
                        mpt = new Date();
                        mpts = mpt.getTimezoneOffset() + mpt.getTime();
                        var child = document.createElement("script");
                        child.src = 'http://adfarm.mediaplex.com/ad/js/6730-42095-15056-2?rfr=xxxx&mpt=' + mpts + '&mpvc=';
                        document.getElementById("head").appendChild(child);
                        // back to where we came from
                        document.write = tmp;
                        // flush
                        document.getElementById("ad").innerHTML = text;
                        alert("Done");
                };
        </script>
        </head>
        <body onload="loadAds();">
                <p>Oben</p>
                <p id="ad"></p>
                <p>Unten</p>
        </body>
</html>

Liefert mir allerdings im Firefox nen Fehler ("Illegal Character" in der geladenen Datei). Dieses herumgefummel mit document.write ist (wahrscheinlich) nötig, weil das eingebundene Skript via document.write seine Ausgabe basteln wird. Weiß auch nicht, ob das funktioniert.

Das Problem haste aber wohl auf jedenfall. Du willst die Daten an ne spezielle Stelle packen und diese selten dummen Scripts schreiben ihre Ausgabe mit document.write... sieht beim Ajax-Vorschlag auch nicht wesentlich anders aus. Na ja, spiel vielleicht erstmal damit rum. Vielleicht kriegst es ja zum laufen, sonst gibts immer noch ne Brechstangenmethode.

Titus 06.01.2008 09:31

Zitat:

weil das eingebundene Skript via document.write seine Ausgabe basteln wird
der externe Code lt. nach Firebug bspw.
Code:

document.write('<a target="_blank" href="http://adfarm.mediaplex.com/ad/ck/6730-42095-15056-2?rfr=4367&mpt=1199611608308&mpvc="><img ismap border=0 src="http://img-cdn.mediaplex.com/0/6730/42095/de_soccer_generic_728x90_EUR_30_je.gif" ></a>');
falls das jemand wissen will

Björn 06.01.2008 09:54

Warum übernimmst nicht einfach den <noscript> teil???
MfG

Silmarillion 06.01.2008 12:33

@ Patrick: kann ich Deinen Code so 1:1 übernehmen? (bin, nach wie vor, kein Coder ;) )

Und was genau ist die "Brechstangenmethode"? ^^

@ Björn: wenn meinste jetzt?

mfg

Björn 06.01.2008 12:45

Dich
im ersten Beitrag steht doch das hier:
Code:

<a href="http://adfarm.mediaplex.com/ad/ck/6730-42095-15056-2?rfr=xxxx">
<img src="http://adfarm.mediaplex.com/ad/bn/6730-42095-15056-2?rfr=xxxx" alt="Click Here" border="0">
</a>

Nimm doch einfach das, halt die xxx ersetzen
mfg

Silmarillion 06.01.2008 12:59

Und den Rest einfach wegfallen lassen? ^^
Nun, vorausgesetzt dem ist so...ich denke unser Werbepartner hätte ein Problem damit, wenn ich den restlichen Code einfach weglassen würde. ;)

mfg

Björn 06.01.2008 13:38

Naja den Code bekommt man angezeigt, wenn man kein Javascript hat.
Naja entweder du schreibst deinen Werbepartner an oder lässt es so wie es ist, andere möglichkeiten wirst du gar nicht haben

Patrick Gotthardt 06.01.2008 20:47

Das mit dem anschreiben oder direkt nur die noscript-Variante zu übernehmen dürfte die beste Lösung sein.
Brechstange wäre ein lokales Script zu schreiben, das die Javascript-Datei per HTTP abruft, parst und nur das fertige HTML liefert. Wenn das Teil wirklich so simpel ist wie bei Titus reicht dafür ein einfacher regulärer Ausdruck. Das gute dabei ist, das man den Teil definitiv besser per Ajax oder onload einbinden könnte. Ohne das man da Funktionen von Objekten umschreiben müsste.
Mein Beispiel war'n Beispiel und lief bei mir ja nicht (Problem beim einbinden des externen Javascripts).

Also wenn du's nicht über den Anbieter lösen kannst kann man sich überlegen, ob man da was komplexeres für macht. Aber frag erstmal nach. Vielleicht gibts ne hübschere Lösung. ;)

Frankie 08.11.2008 16:35

Lösung
 
Die Lösung des Problems findet sich hier:

twoBirds AJAX Development Blog Blog Archive domWrite() lazy loading ads: external code using document.write() - execution AFTER the page has rendered

Grüße,
Frankie


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25