2012-07-19 12 views
9

NOTA: He editado esto con más información de lo que estoy recibiendo de un tercero.Document.writes anidados y anuncios de terceros que no funcionan en IE !!!! Cualquier solución que sea segura?

En pocas palabras tengo una tarea para incluir una etiqueta de anuncio JS que llama a nuestro mecanismo de servidor de anuncios interno que vuelve a intentar un guión tercero que document.writes a su archivo externo ... no va a funcionar en IE . Alguien me mencionó que el document.writes anidado no funcionará en IE. He intentado varias cosas ... appendTo/writeln/romper la etiqueta del script/decodificar las etiquetas del script, etc. nada parece funcionar. Como esto es algo nuevo para mí, tal vez estoy pasando por alto lo obvio.

Esto es lo que parece:

my html: 
<script language="JavaScript" type="text/javascript"> 
    document.write('\x3Cscript type="text/javascript" src="_some_Path_to_internal_ad_server">\x3C/script>';); 
</script> 

Esa llamada termina con lo que en un código que se parece a esto: así como se ve, no hay etiquetas de script contiene.

tl1 = '989'; 
    tl2 = 'xnlll'; 
    document.write('<script type=\"text/javascript\" src=\"_some_Path_to_third_party.js\"><\/script>'); 

Ahora, que "_some_Path_to_third_party.js" trae en algún código JS que tiene document.writes y document.writeln

Estoy escribiendo esto de la parte superior de mi cabeza, así que no me acuerdo exactamente cómo se rompen las etiquetas de los guiones, pero no creo que ese sea el problema. Creo que es el documento anidado. Escribe en IE.

Intenté varias cosas e incluso presenté mi primera llamada de scripts directamente en mi página. No document.writes - solo

<script language="JavaScript" type="text/javascript" src="_some_Path_to_internal_ad_server"> 

No dice ningún dado.

pero una llamada directa a los js externos trabajo hizo (la eliminación de mi llamada a mi servidor de anuncios interna que llama posteriormente la tercera convocatoria del partido), Ala:

<script language="JavaScript" type="text/javascript" src="_some_Path_to_internal_ad_server"> 

Alguien tiene experiencia en tratar con cualquier cosa le gusta esto y cómo superarlo?

+3

Sidenote: el atributo _language no es válido._ – undefined

+0

En el último script que publicó, quiso decir '_some_Path_to_third_party.js' ¿verdad? – paislee

+0

Además, ¿qué versiones de IE has probado? – paislee

Respuesta

6

Dado que no publicó suficientes detalles para escribir una respuesta completa a su problema (usted escribe: "Estoy escribiendo esto en la cabeza, así que no recuerdo exactamente cómo se rompen las etiquetas de secuencia de comandos ") así que aquí hay algunos consejos generales para comenzar en lugar de una solución directa. Usted dice que está convencido de que el problema se debe a demasiadas llamadas document.write, por lo que me concentraré en minimizar su número siempre que sea posible. Esperemos que finalmente te permita resolver tu problema.

punto y coma adicional

En el primer ejemplo tiene:

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

Extracción del punto y coma adicional sería:

document.write(' ... '); 

Podría ser que causan algunos problemas? Si no, sigue leyendo ...

primer lugar de todos algunos conceptos básicos:

tipo y el lenguaje de secuencias de comandos

<script language="JavaScript" type="text/javascript"> 

El atributo "lenguaje" está en desuso por lo que no lo use. El problema con el atributo "tipo" es que el tipo text/javascript MIME está obsoleto (ver RFC4329) y la aplicación/javascript (el tipo correcto) no es universalmente compatible. En la práctica, todos los navegadores siempre han sabido que sin "tipo" solo es JavaScript y es por eso que recomiendo dejarlo para cada versión de marcado donde sea opcional, como HTML5. (Además, el tipo MIME es algo que el servidor debe especificar). Consulte this question para obtener más información. Habiendo dicho eso, usaré <script> en los ejemplos a continuación.

Minimizar el documento escribe

Teniendo esto en el código HTML:

<script> 
    document.write('\x3Cscript src="file.js">\x3C/script>'); 
</script> 

es exactamente equivalente a:

<script src="file.js"></script> 

Se crea así sentido utilizar document.write en este caso, a menos que esté construir el nombre del script dinámicamente en JavaScript o algo así, pero incluso así puede hacerlo sin document.write.

Si no conoce la ruta de su script y está utilizando, por ejemplo. una variable de JavaScript llamado path entonces usted puede tener la tentación de escribir algo como esto:

<script> 
    document.write('\x3Cscript src="' + path + '">\x3C/script>'); 
</script> 

Pero se puede lograr más o menos el mismo resultado con algo similar a lo que Google utiliza para Analítica:

var newScript = document.createElement('script'); 
newScript.src = path; // or newScript.src = 'file.js'; 
var firstScript = document.getElementsByTagName('script')[0]; 
firstScript.parentNode.insertBefore(newScript, firstScript); 

O más corto, usando appendChild:

var newScript = document.createElement('script'); 
newScript.src = path; // or newScript.src = 'file.js'; 
document.body.appendChild(newScript); 

o más fácil usando jQuery:

$('<script />', {src: path}).appendTo('body'); 

donde path es la URL de su script. O parcialmente usando jQuery sólo para la inserción en el DOM:

var newScript = document.createElement('script'); 
newScript.src = path; // or newScript.src = 'file.js'; 
$('body').append(newScript); 

También puede ser capaz de usar jQuery.getScript:

$.getScript(path); 

más ideas

Para ver otras ideas:

Estas son algunas cosas básicas que usted puede hacer para minimizar el uso de document.write. Espero que esto te ayude a empezar.

Cuestiones relacionadas