2011-08-15 18 views
5

He actualizado de jQuery 1.4.2 a 1.6.2 y ahora sale error (en IE). Tengo JavaScript en la página que se ejecuta por jQuery función globalEval()Después de actualizar a jQuery 1.6.2, globalEval genera un error al intentar ejecutar javascript en la página

// Evaluates a script in a global context 
// Workarounds based on findings by Jim Driscoll 
// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context 
globalEval: function(data) { 
    if (data && rnotwhite.test(data)) { 
     // We use execScript on Internet Explorer 
     // We use an anonymous function so that context is window 
     // rather than jQuery in Firefox 
     (window.execScript || function(data) { 
      window[ "eval" ].call(window, data); 
     })(data); 
    } 
}, 

En IE la llamada ha producido una excepción:

"Error: Could not complete the operation due to error 80020101."

Los datos parámetro que se ejecutan es javascript variables en la página rodeadas de <!-- -->

<!-- 
var id = \"ctrl90900\"; 

var url = \"myur.com/blah.html\"; 

--> 

estoy usando IE9, y jQuery 1.6.2 No estoy seguro de por qué esto causaría un error.

+1

¿Funciona si elimina los comentarios? No es JavaScript válido. – alex

+0

Intenta usar esta expresión regular en la cadena antes de pasar a '$ .globalEval()' -> 'str = str.replace (/ /, '$ 1'); '[jsFiddle] (http://jsfiddle.net/alexdickson/GUf7Q/). – alex

+0

@alex eso fue todo. ¡Gracias! –

Respuesta

1

Podría ser la comentando del código, que es inválida y JavaScript unnecessary in this day and age.

Puede despojar a cabo con esta expresión regular ...

$.globalEval(str.replace(/<!--\s*([\s\S]*?)\s*-->/, '$1')); 

jsFiddle.

+0

Parece que envolver código javscript en CDATA es el camino a seguir y que no crea problemas como el que se describe https://developer.mozilla.org/en/Writing_JavaScript_for_XHTML –

2

Si hay any error at all in a script passed to execScript, en lo que respecta a Internet Explorer, informará un 80020101 en lugar del error original.

Por lo tanto, también compruebe si faltan puntos y comas y características JS no admitidas por IE.

Para los pasajes de código corto, encontré la técnica de depuración más efectiva para comentar las partes del código y ver si el error sigue apareciendo. Si no es así, examine el bloque de código que acaba de comentarse para los errores anteriores.

+0

'{foo: 'bar'}' es perfectamente válido y no arrojaría un error en IE siempre que sea parte de una expresión sintácticamente válida. –

+0

Tienes razón, gracias. Actualizado. – cmc

0

sólo quería añadir un poco de esto - que estaba recibiendo un error 80020101 cuando en un script PHP llamada AJAX que incluía JavaScript. La secuencia de comandos dentro del archivo PHP también se estaba rompiendo de alguna manera, y se rehusaba a renderizar cualquiera de las secuencias de comandos en el div designado (otros elementos del PHP entraban, pero no había nada dentro del JavaScript; estaba intentando dibujar un gráfico usando HighChart).

Resulta que había una función PHP indefinido dentro del JavaScript en el archivo PHP incluido (utilizado para repetir algunas de texto). Encontré esto usando Firebug.

Así que la línea inferior, asegúrese de que usted no tiene ninguna función en el interior indefinidos código regresando a través de AJAX.

Cuestiones relacionadas