2010-03-12 11 views
13

Ich versuche, etwas auf Javascript zu bauen, dass ich einen Eingang haben kann, die alles wie String sein kann, xml, javascript und (Nicht-JavaScript-String ohne Anführungszeichen) wie folgt :Javascript - fangen Syntax und führen alternative Funktion

//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;"); 

diese ersten 3 arbeiten So gut, da sie einfach Javascript nativen Formaten

sind, aber wenn ich versuchen, diese im Inneren verwenden Javascript

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

Offensichtlich interpretiert Javascript dies als Syntaxfehler, weil es denkt, dass sein Javascript einen SyntaxError wirft.

Also was ich möchte es tun, um diesen Fehler zu fangen und die Einstellungsmethode durchzuführen, wenn dies auftritt.

Ich habe bereits mit try catch versucht, aber es funktioniert nicht, da es den Syntaxfehler zurückgibt, sobald es versucht, den Code auszuführen.

Jede Hilfe wäre viel

Beifall gewürdigt werden :)

Weitere Informationen: eine externe Datei Stellen Sie sich vor, dass Sie Javascript lesen würde, Spidermonkey verwenden, so ist es ein Zeug nicht-Browser (ich kann nicht benutze HttpRequest, DOM, etc ...) .. nicht sicher, ob das wichtig ist, aber da ist es. :)

Antwort

20

Sind Sie sicher, dass ein Try...Catch Block nicht funktioniert? Dieses Beispiel funktioniert für mich in Firefox.

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

ha das ist richtig (was für ein Tier :()! Dank viel jesse, versuchte ich, bevor es ohne die eval direkt zu erklären, das ist, warum ich den Fehler habe ... aber innerhalb des eval es hat sehr gut funktioniert! Prost :) – zanona

+0

Ja, ich sehe nicht, was ist falsch mit dieser Art, es zu tun. – Robusto

+2

Ich habe auch versucht, einen Syntaxfehler abzufangen, aber er hat es trotzdem als "uncaught" an die Konsole gesendet. Der Syntaxfehler wurde durch eine abgebrochene Ajax-Anfrage verursacht, nicht durch ein "eval", aber es ist das gleiche Konzept, ich dachte, sie würden es versuchen, aber es klappte nicht. –