2012-08-30 8 views
17

Estaba probando nuestro sitio, en IE8 y obtuve el temido error Unexpected call to method or property access..Crear etiqueta de script en IE8

Después de mucha depuración (los devtools de IE8 apestan), encontré la línea ofensiva.

$('<script>').html(JSData).appendTo('head') 

El problema es $('<script>').html(JSData). Intenté ejecutar solo eso en la consola, y todavía tengo el error.

¿Por qué IE8 no puede establecer el .html en una nueva secuencia de comandos creada?

P.S. Esto también falla:

$(document.createElement('script')).html(JSData) 

ACTUALIZACIÓN: Traté de crear la etiqueta de script sin jQuery:

var scriptTag = document.createElement('script'); 
scriptTag.type = 'text/javascript'; 
scriptTag.innerHTML = JSData; 

En la línea scriptTag.innerHTML = JSData;, IE8 da Unknown runtime error. Gracias IE8.

+4

¿Ha intentado utilizar 'text' en lugar de' html'? – Shmiddty

+0

Parece que sería más fácil/mejor simplemente 'eval()' el script de todos modos. – Pointy

+0

@Pointy: podría usar 'eval' (o más bien,' $ .globalEval' de jQuery), pero pensé que esto podría ser "más rápido". –

Respuesta

15

Su método de solo JavaScript necesita agregar el elemento script al documento.

IE < 9 no reconoce innerHTML o childNodes en las etiquetas de secuencia de comandos, pero todos los navegadores admiten la propiedad de texto.

var scriptTag = document.createElement('script'); 
scriptTag.text= JSData; 
document.body.appendChild(scriptTag); 
+0

Hmm, esto parece funcionar. Curioso que '$ ('

Cuestiones relacionadas