Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Estoy tratando de depurar un script JavaScript que se lee en una extensión de Firefox y se ejecuta. Solo puedo ver errores a través de la consola Firebug (mi código es invisible para Firebug), y está informando un & "; Literal de cadena sin terminar. &";

Verifiqué la línea y las líneas a su alrededor y todo parece estar entre paréntesis, llaves y comillas, etc. ¿Cuáles son otras posibles causas que debería estar buscando?

¿Fue útil?

Solución

La mayoría de los navegadores parecen tener problemas con un código como este:

var foo = "</script>";

En Firefox, Opera e IE8 esto da como resultado un error literal de cadena sin terminar. Puede ser bastante desagradable al serializar código html que incluye scripts.

Otros consejos

¡Busque saltos de línea! Esos son a menudo la causa.

Yo votaría por la respuesta de jamtoday si tuviera la " reputación "

Si sus datos provienen de PHP, esto podría ayudar

$str = str_replace(array("\r", "\n"), '', $str);

Acabo de descubrir que "<\/script>" parece funcionar tan bien como "</scr"+"ipt>".

Puede intentar ejecutar el script a través de JSLint .

Simplemente escapa de los cierres de etiquetas o usa el código ascii

es decir

<\/script>

es decir

<&#47;script>

Si ha hecho cortar / pegar: algunos resaltadores de sintaxis en línea alterarán las comillas simples y dobles, convirtiéndolas en pares de comillas formateadas (pares coincidentes de apertura y cierre). (aunque no puedo encontrar ningún ejemplo en este momento) ... Eso implica presionar Command- + varias veces y mirar los caracteres de tu cita

Pruebe con una fuente diferente? también, diferentes editores e IDE utilizan diferentes tokenizadores y reglas de resaltado , y JS es uno de los lenguajes más dinámicos para analizar, así que intente abrir el archivo en emacs, vim, gedit (con complementos JS) ... Si tiene suerte, uno de ellos mostrará una larga cadena púrpura que se ejecuta hasta el final de expediente.

Busque una cadena que contenga una comilla simple sin escape que pueda ser insertada por algún código del lado del servidor.

¿Has escapado de tus barras diagonales (/)? He tenido problemas con esos antes

¿Has probado Chromebug ? Es el Firebug para extensiones.

He tenido problemas con las comillas anguladas en el pasado (& # 8216;) generalmente por copiar y pegar desde Word. Reemplazarlos con comillas simples (') hace el truco.

Además, tenga en cuenta que% 0A es la URL de carácter de salto de línea codificada. Me tomó un tiempo encontrar dónde había un salto de línea en mi código ofensivo.

Si nada ayuda, busque algunos caracteres de código único como

\u2028

esto puede romper su cadena en más de una línea y arrojar este error

Tal vez sea porque tienes un salto de línea en tu código PHP. Si necesita saltos de línea en el mensaje de la ventana de alerta, inclúyalo como una sintaxis escapada al final de cada línea en su código PHP. Normalmente lo hago de la siguiente manera:

$message = 'line 1.\\n';
$message .= 'line 2.';

Pruebe con " búsqueda binaria " ;. Elimine la mitad del código e intente nuevamente. Si el error persiste, elimine la mitad del código restante. Si el error no está allí, vuelva a colocar lo que eliminó y elimine la mitad. Repetir.

Debería poder reducirlo a unas pocas líneas con bastante rapidez. Mi experiencia ha sido que en este punto, notará una cadena estúpida malformada.

Puede ser conveniente realizar esto en una versión guardada de la salida HTML en el navegador, si no está seguro en qué recurso del lado del servidor se encuentra el error.

El desarrollador de la página web adivinó mal qué codificación utiliza el navegador del espectador. Esto generalmente se puede resolver especificando una codificación en el encabezado de la página.

Escanee el código que viene antes la línea # mencionada por mensaje de error. Cualquier cosa que no esté terminada ha resultado en algo aguas abajo (la línea culpable #), que se marcará.

El espacio en blanco es otro problema que encuentro, causa este error. Usar una función para recortar el espacio en blanco puede ayudar.

$ str = str_replace (array (" \ r \ n ", " \ n \ r ", " \ r " ;, " \ n "), '
', tiras de barra ($ str));

Esto debería funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top