IE8 arroja un error de sintaxis de JavaScript, fuera de un script

Tengo un problema extraño en el que IE8 informa un error de JavaScript fuera de una etiqueta de secuencia de comandos (o eso afirma) y rompe todos los JS adicionales en la página. Aquí está el código ofensivo:

<script type="text/javascript">//<![CDATA[
    function emailReport() {
        var params = window.location.search;
        var url = "scripts/someScript.php" + params;
        ajaxwl(url, false, null, function() {
            alert("Report successfully sent.");
        });
    }
//]]></script>
<h2>Analyst Report</h2>

ajaxwl() es solo un contenedor sobre jQuery.ajax(), y se usa en cientos de lugares en todo el sitio sin problemas.

IE afirma que el error de sintaxis (no explica de qué tipo) está en el carácter 23 de la línea con el </script> etiqueta. Esto es especialmente extraño ya que esa línea solo tiene 15 caracteres. Sin embargo, si inspecciono la supuesta ubicación en las herramientas de desarrollo de IE8, en realidad pone el error en el medio de la <h2> etiqueta en la línea siguiente.

Aquí está el mensaje de error oficial de IE:

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.1; MS-RTC LM 8)
Timestamp: Tue, 12 Jun 2012 21:19:38 UTC


Message: Syntax error
Line: 175
Char: 23
Code: 0

Dado que IE no me dice un mensaje de error real, no he podido encontrar nada sobre esto en línea hasta ahora. JSLint tampoco produce nada útil y funciona perfectamente en Chrome y FF. ¿Me estoy perdiendo algo obvio?


EDITAR: mi corazonada es que, a pesar de que IE informa el error en el fragmento de código anterior, en realidad se está muriendo en otro lugar. Ese parece ser el consenso. Supongo que revisaré la página y veré si tengo suerte y encuentro el error.

preguntado el 12 de junio de 12 a las 22:06

¿Qué sucede si elimina el CDATA (etiquetas de apertura y cierre)? -

¿Hace la llamada del Ajax? ¿Cuál es la URL que devuelve? Tal vez intente evaluar la respuesta como JavaScript. -

Tiene una sección XML CDATA, ¿está usando un tipo de documento XHTML? -

El tipo de documento es XHTML 1.0 Strict. Quitar el CDATA no hace ninguna diferencia. Se realiza una llamada AJAX, pero no devuelve nada. -

Sugeriría abrir el archivo con un editor hexadecimal y verificar si no hay caracteres de control invisibles divertidos antes de la nueva línea entre </script> y <h2>. -

2 Respuestas

IE es conocido por no especificar el archivo donde se produce un error, o no especificarlo correctamente. Intente ejecutarlo en el depurador de IE y vea si el error no está en la línea 175 de un archivo completamente diferente.

EDITAR El depurador no funcionó, por lo que tendrá que hacer esto de la manera más difícil: ahorrar la página a su disco; concatenar todos los archivos Javascript en un archivo grande; incluya ese archivo desde una página en blanco. Ahora el número de línea será diferente, pero preciso en el único archivo JS que tiene.

Mi predicción: coma terminal. La siguiente línea de código es legal en Javascript, pero no en IE "JScript".

 var x = [ 0, ];

"Steve Jobs está muerto y Bill Gates está vivo porque no hay dios. Pero dentro de 100 años, Jobs será recordado con Edison y Eli Whitney mientras que Gates será olvidado, porque no hay justicia."

Respondido el 13 de junio de 12 a las 02:06

Buena llamada, probé eso también. Pude hacer que el depurador se ejecutara dos veces antes de que colapsara IE, pero tampoco detectó nada. Mi corazonada es que debido a que IE cree que es un error de sintaxis, no un error de tiempo de ejecución, el depurador no se interrumpirá. - user1452259

El hecho de que recuerdes a Edison y no a Tesla, dice que estás equivocado :) - patinar

Recuerdo a Tesla, pero también recuerdo que estaba jugando con los rayos de la muerte y las turbinas sin aspas mientras Edison estaba cambiando el mundo. - miguel lorton

Acabo de encender mi caja de Windows con IE 8.0.7601 y no tengo problemas de sintaxis informados con este código

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
   <title>I AM YOUR DOCUMENT TITLE REPLACE ME</title>
   <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
   <meta http-equiv="Content-Style-Type" content="text/css" />
 </head>
 <body>
   <div>

<script type="text/javascript">//<![CDATA[
    function emailReport() {
        var params = window.location.search;
        var url = "scripts/someScript.php" + params;
        ajaxwl(url, false, null, function() {
            alert("Report successfully sent.");
        });
    }
//]]></script>
<h2>Analyst Report</h2>


   </div>
 </body>
</html>

Respondido el 12 de junio de 12 a las 23:06

El // es necesario. Eliminarlo hace que el navegador interprete <![CDATA[ como un comando JS, que obviamente no lo es. - user1452259

Copié su código de la pregunta, lo ejecuté a través del servicio de validación de HTML y generó las etiquetas XHMTL adicionales de la placa de caldera, etc. Intente copiar mi respuesta y verla en IE. - Brad

Eso funciona bien para mí también. Parece que IE informa un error en la ubicación incorrecta. Puaj. - user1452259

¡Que dolor! Solo tendrá que eliminar las secciones del script pieza por pieza hasta que lo encuentre :( - Brad

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.