2009-04-29 17 views
2

Wir möchten Anzeigen auf unserer Website schalten, aber der Adserver, mit dem wir uns unterhalten, hat Probleme damit, seine Werbung schnell genug für uns zu liefern.Redirect document.write from javascript script

Das Problem, wie ich es sehe, ist, dass wir eine <script src="http://advertiserurl/myadvertkey"></script> enthalten sollen, wo wir die Anzeige anzeigen möchten, und es wird dann ein Skript herunterladen und document.write verwenden, um etwas HTML einzufügen.

Problem ist, dass der Aufruf an die Website des Werbetreibenden langsam ist und der zurückgegebene Code eine andere Datei (die Anzeige) herunterlädt, was bedeutet, dass die Seiten langsamer werden, während wir auf die Anfrage warten.

Gibt es eine Möglichkeit, die Ausgabe aus dem Aufruf von document.write zu übernehmen und diese nach dem Laden der Seite zu schreiben?

Grundsätzlich möchte ich dies tun:

<html> 
<body> 

    <script> 
function onLoad() { 
    var urlToGetContentFrom = 'http://advertiserurl/myadvertkey'; 

    // download js from above url somehow 

    var advertHtml = // do something awesome to interprete document.write output 
    $('someElement').innerHTML = advertHtml; 
} 
    </script> 

</body> 
</html> 

oder ähnliches, die mir die Ausgabe der Datei erhalten lassen und anzeigen.

+0

Wir überlegten, den Inhalt der Aufrufe zwischenzuspeichern und diese zu bedienen, aber wir bekommen eine eindeutige Verbindung und ein Bild, das für jede Anfrage bedient wird, was dies aufhebt. Ich weiß, dass dies vielleicht ein wenig zwanghaft ist, aber das Hinzufügen von zusätzlichen .7 Sekunden zu jeder Anfrage macht jede Seite doppelt so lange zum Laden. – mjallday

Antwort

3

Um das Laden der Hauptseite von der Anzeigenladung zu entkoppeln, können Sie die Anzeige auf einer eigenen Seite in einem iframe platzieren oder in ähnlicher Weise die Skriptdatei mit AJAX herunterladen und bei jedem Herunterfahren ausführen. Wenn ersteres nicht ausreicht, weil URI oder was auch immer gemeint ist, gibt letzteres Ihnen einige Flexibilität: Sie könnten string replacement verwenden, um "document.write" in etwas anderes umzuschreiben, oder es vielleicht vorübergehend ersetzen wie "document.write = custom_function; ".

+0

großartige Idee. Ich habe im Wesentlichen geändert in: document.load = function() { var adArea = $ ('ad'); adArea.innerHtml = ""; } das scheint gut zu funktionieren. danke – mjallday

6

Wenn ich richtig verstehe, möchten Sie document.write auf eine Variable erfassen, anstatt sie in das Dokument zu schreiben. Sie können dies tatsächlich tun:

var advertHtml = ''; 
var oldWrite = document.write; 

document.write = function(str) 
{ 
    advertHtml += str; 
} 

// Ad code here 

// Put back the old function 
document.write = oldWrite; 

// Later... 
...innerHTML = advertHtml; 

Sie haben immer noch den Treffer des Ladens der Skriptdatei.

+0

Ich glaube nicht, dass ich das tun kann, weil ich das externe Skript nicht bearbeiten kann, das das document.write darin hat. – mjallday

+0

Sie müssen das externe Skript nicht bearbeiten - Sie können das Material vor und nach "// Ad code here" in separate