javascript document.write in externe js-Datei

9

Wenn ich an einem großen, hoch belasteten Projekt arbeite, habe ich das Problem, das bereits in Milliarden von Themen in Foren und Blogs beschrieben wurde, aber es gibt keine Lösung, die in meinem Fall hilft. Hier ist die Geschichte.

Ich habe den HTML-Code von Banner, ich weiß nicht, was der Code ist. Manchmal ist es einfach HTML, aber manchmal ist es <script> tag mit document.write darin mit <script> tag, das src hat, um das Netzwerk darin zu doppelklicken.

Also haben wir: script & gt; document.write & gt; Skript (Doppelklick).

Doppelklick Netzwerk, wie Sie vielleicht wissen, verwenden Sie auch document.write und die meiste Zeit geben sie Flash-Banner, die eine weitere js-Datei laden müssen.

Nach allem, was wir haben: script & gt; document.write & gt; Skript (Doppelklick) & gt; document.write & gt; Skript & gt; ...

Dies funktioniert gut, wenn Sie es direkt in HTML einfügen. Seitenrendering 1 Teil, lade banner1, Renderseite beibehalten, banner2 laden, Seitenrendering abschließen.

Aber im Moment muss ich die Seite zuerst rendern und erst danach die Banner laden. Als Banner benutze document.write Ich muss es vor dem window.onload -Ereignis laden (beachte: nachdem window.onload document.write das ganze Dokument neu schreiben wird.)

Was ich getan habe:

Im Kopfbereich habe ich ein Banner-Objekt (echter Namespace Art riesig :)) mit Property Scope.

Wenn Seitenrendering und Bannercode übereinstimmen, lege ich den Code des Banners in den Bereich und setze <div id="bannerPlaceHolder"+id></div> - also hier muss ich später den Bannerinhalt einfügen

Seite gerendert und vor </body> tag Ich setze <script>banners.load()</script> banners.load Methode für jedes Element im Bereich Array:

%Vor%

Und erst danach habe ich window.onload() event, die das tun:

nimm alle Banner codeHolders und node-by-node hänge die Knoten von codeHolder an placeHolder an, also habe ich im Ergebnis Banner geladen nachdem die Seite und Banner an den richtigen Stellen sind.

Alles ist perfekt außer IE, es lädt jedes js-Skript, das dynamisch in DOM eingefügt wurde, so dass document.write innerhalb von doubleclick-Skripten Knoten an das Ende des Dokuments und nicht in meine codeHolder-Knoten anfügt. Wie immer ist es nur in IE.

Ich werde wirklich geschätzt werden für jeden, der die Lösung kennt.

    
small_jam 24.11.2008, 21:31
quelle

6 Antworten

3

Sie brauchen writeCapture.js (vollständige Offenlegung: Ich bin der Autor.) Alle Wetten sind mit Skripten von Drittanbietern erledigt. Heute verwenden sie document.write , um ein bestimmtes HTML zu generieren, aber morgen könnten sie es ändern und alle einfachen Hacks, die auf dem Ersetzen von document.write basieren, müssen aktualisiert werden. writeCapture kümmert sich darum. Ihre Verwendung wäre etwas wie:

%Vor%

Die Bibliothek kann mit jeder beliebigen Tiefe von Skript-Tags umgehen und eignet sich hervorragend für eingestreutes HTML. Es hat auch einen eigenständigen Build, wenn Sie jQuery nicht verwenden.

    
noah 29.12.2009 16:36
quelle
1

Normalerweise kennen Sie bei Bannern die genauen Abmessungen und die Platzierung, also wie wäre es, wenn Sie dynamisch einen iframe erstellen, dessen Inhalt dem von bannerCode entspricht, und das ist alles.

    
JeremyWeir 12.12.2008 16:55
quelle
0

vielleicht könnten Sie die Eigenschaft innerHTML verwenden: document.getElementById ("x"). innerHTML=".................";

Oder Sie könnten das DOM: CreateElement und AppendChild

    
netadictos 24.11.2008 21:37
quelle
0

laden Sie es in einen versteckten (Größe 0x0) iframe, dann verschieben Sie es anderswo mit Javascript

    
mike nvck 17.02.2009 11:16
quelle
0

Ich denke, iframe Lösung ist hässlich. Warum können Sie die Banner nicht auf eine separate Seite laden und AJAX zu einem DIV machen?

    
mkoryak 22.04.2009 13:54
quelle
0

Aufteilen der document.write () - Aufrufe in separaten -Tags, so dass die Ausgabe wie folgt aussehen sollte:

document.write (''); document.write (bannerCode);

document.write ('');

Der IE wartet auf document.write (bannerCode) ist bereit und schreibt das schließende -Tag.

    
sebakotiv 23.09.2009 13:26
quelle