2008-11-24 33 views
9

Trabajando en un proyecto grande y de gran cargamento Obtuve el problema que ya se describió en miles de millones de temas en foros y blogs, pero no hay una solución que me ayude en mi caso. Aquí está la historia.javascript document.write en un archivo js externo

Tengo el código HTML de banner, no sé cuál es el código. A veces es HTML simple, pero a veces es la etiqueta <script> con document.write dentro de ella con la etiqueta <script> que tiene src para hacer doble clic en la red.

Así que tenemos: script> document.write> script (doubleclick).

haga doble clic en la red, como ya sabrá, use document.write también y la mayoría de las veces dan banners de flash que necesitan cargar un archivo js más.

Así que después de todo lo que tenemos: script> document.write> guión (DoubleClick)> document.write> script> ...

Esto funciona bien cuando se coloca directamente en formato HTML. Página que rinde 1 parte, cargue pancarta 1, guarde la página de presentación, cargue pancarta 2, finalice la representación de la página.

Pero ahora mismo necesito renderizar la página primero y solo después de cargar banners. medida que el uso de la bandera document.write tengo que cargarlo antes del evento window.onload (nota: después de document.write window.onload volverá a escribir todo el documento.)

Lo que he hecho:

En la cabeza la sección I tiene un objeto de banners (espacio de nombres real tipo de enorme :)), con ámbito de propiedad.

Cuando la renderización de páginas y el código de banner es encuentro coloco el código de la bandera en el alcance y la puse <div id="bannerPlaceHolder"+id></div> - así que aquí voy a tener que poner el contenido de banner más adelante

Página mostrada y antes </body> etiqueta puse <script>banners.load()</script> método banners.load hacer esto para cada elemento de matriz de alcance:

document.write('<div id="codeHolder'+id+'">'); 
document.write(bannerCode); 
document.write('</div>'); 

Y sólo después de esto no tengo window.onload() caso de que haga lo siguiente:

adoptar todas las pancartas c odeHolders y node-by-node lo añaden nodos de codeHolder a placeHolder, por lo que en el resultado he cargado banners después de renderizar la página y los banners están en los lugares correctos.

Todo es perfecto, excepto IE, carga cualquier script js que fue puesto en DOM dinámicamente en modo asincrónico, por lo que document.write dentro de scripts doubleclick anexa nodos al final del documento y no en mi codeHolder nodes. Como de costumbre, solo en IE.

Seré muy apreciado por cualquiera que conozca la solución.

Respuesta

0

Quizás podría comprar la propiedad innerHTML: document.getElementById ("x"). InnerHTML = ".................";

O bien, usted podría el DOM: CreateElement y AppendChild

+0

innerHTML no ejecuta código en <'script> etiquetas dinámicamente No puedo crear el script porque el código html que viene no se puede controlar –

+0

debe haber una nueva línea entre las etiquetas y dinámicamente en el comentario anterior –

1

lo general con pancartas podrás conocer las dimensiones exactas y la colocación, por lo que la forma de crear un iframe dinámicamente con el contenido de ser lo que tiene en bannerCode y eso es todo .

0

carga en un iframe oculto (tamaño 0x0), a continuación, pasar a otra parte con javascript

0

Creo solución de marco flotante es feo. ¿Por qué no puedes cargar los banners en una página separada y AJAX en un DIV?

0

Dividir la document.write() - llamadas en -tags separadas, por lo que la salida debería verse como:

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

document.write ('');

El IE esperará a que figure document.write (bannerCode) y cuando se escriba la etiqueta de cierre.

3

Necesita writeCapture.js (publicación completa: soy el autor). Todas las apuestas están desactivadas con scripts de terceros. Hoy usan document.write para generar HTML específico, pero mañana podrían cambiarlo y cualquier truco simple basado en reemplazar document.write deberá actualizarse. writeCapture se ocupa de eso. Su uso sería algo así como:

$('#bannerPlaceHolder').writeCapture().html('<script type="text/javascript" src="http://doubleclick.net/bannerCode.js"></script>'); 

La biblioteca puede manejar cualquier profundidad arbitraria de etiquetas de script y lo hace muy bien con intercaladas HTML. También tiene una versión independiente si no usas jQuery.

Cuestiones relacionadas