2010-03-12 12 views
13

Sto cercando di costruire qualcosa su JavaScript che posso avere un ingresso che può essere tutto come stringa, XML, JavaScript e (stringa non javascript senza virgolette) come segue :javascript - cattura SyntaxError ed eseguire funzione 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;"); 

Quindi preliminari 3 stanno lavorando bene in quanto sono semplici formati nativi JavaScript

ma quando provo utilizzare questo all'interno javascript

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

Ovviamente javascript lo interpreta come errore di sintassi perché pensa che il suo javascript lancino un SyntaxError.

Quindi, cosa mi piacerebbe farlo per rilevare questo errore ed eseguire il metodo di regolazione se ciò si verifica.

Ho già provato con try catch ma non funziona poiché continua a restituire l'errore di sintassi non appena tenta di eseguire il codice.

Qualsiasi aiuto sarebbe molto apprezzato

Saluti :)

Informazioni aggiuntive: Immaginate un file esterno che javascript avrebbe letto, utilizzando SpiderMonkey, quindi è una roba non del browser (non posso usa HttpRequest, DOM, ecc ...). Non sono sicuro se questo è importante, ma è così. :)

risposta

20

Sei sicuro che un blocco Try...Catch non funzionerà? Questo esempio funziona per me in Firefox.

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

ettari che è di destra (quello che una bestia :()! Thanks a Jesse molto, ho cercato prima di dichiararla direttamente senza l'eval, è per questo che ho ottenuto l'errore ... ma all'interno della eval esso ha funzionato molto bene! ciao :) – zanona

+0

Sì, non vedo cosa c'è di sbagliato in questo modo di farlo. – Robusto

+2

Ho anche provato a rilevare un errore di sintassi ma lo ha inviato alla console come "non catturato" comunque. L'errore di sintassi è stato causato da una richiesta abortita di ajax e non da una "valutazione" ma è lo stesso concetto, ho pensato che "try..catch'' avrebbe funzionato, ma non è così. –