2010-03-12 14 views
13

Estoy tratando de construir algo en Javascript que puedo tener una entrada que puede ser todo como cadena, XML, Javascript y (cadena no javascript sin comillas) de la siguiente manera :Javascript - SyntaxError captura y ejecutar función alternativa

//strings 
    eval("'hello I am a string'"); /* note the following proper quote marks */ 

//xml 
    eval(<p>Hello I am a XML doc</p>); 

//javascript 
    eval("var hello = 2+2;"); 

así que esta primera 3 están funcionando bien, ya que son formatos nativos de JavaScript simples

pero cuando intento utilizar esto dentro Javascript

//plain-text without quotes 
    eval("hello I am a plain text without quotes"); 
    //--SyntaxError: missing ; before statement:--// 

Obviamente javascript interpreta esto como un error de sintaxis porque cree que su javascript arroja un SyntaxError.

Entonces, ¿qué me gustaría hacer para detectar este error y realizar el método de ajuste si esto ocurre?

Ya he intentado con try catch pero no funciona, ya que sigue devolviendo el error de sintaxis tan pronto como intenta ejecutar el código.

Cualquier ayuda sería muy apreciada

Saludos :)

Información adicional: imaginar a un archivo externo que Javascript leerían, utilizando spidermonkey, así que es un material no-navegador (no puedo usa HttpRequest, DOM, etc ...) ... no estoy seguro si esto importa, pero ahí está. :)

Respuesta

20

¿Estás seguro de que un bloque Try...Catch no funcionará? Este ejemplo funciona para mí en Firefox.

try { 
    eval("hello I am a plain text without quotes"); 
} catch(err) { 
    alert("error caught"); 
} 
+0

ja que sea adecuado (que bestia :()! Gracias Jesse mucho, yo estaba tratando antes de declarar directamente sin la eval, es por eso que tengo el error ... pero dentro de la eval se funcionó muy bien! aplausos :) – zanona

+0

Sí, no veo lo que está mal con esta forma de hacerlo. – Robusto

+2

También traté de detectar un error de sintaxis pero de todos modos lo envió a la consola como "no capturado". El error de sintaxis fue causado por una solicitud abortada de Ajax no como "eval" pero es el mismo concepto, pensé que '' try..catch'' funcionaría pero no fue así. –

Cuestiones relacionadas