Ho un po 'di codice JavaScript specificato in un file di configurazione sul lato server. Dal momento che non posso specificare una funzione JavaScript nel linguaggio di configurazione (Lua), l'ho come stringa. Il server restituisce la stringa in qualche JSON e ho il cliente interpretarla utilizzando una funzione di clean-up:JavaScript eval() "errore di sintassi" durante l'analisi di una stringa di funzioni
parse_fields = function(fields) {
for (var i = 0; i < fields.length; ++i) {
if (fields[i].sortType) {
sort_string = fields[i].sortType;
fields[i].sortType = eval(sort_string);
}
return fields;
}
};
Quindi, fondamentalmente solo valuta sortType
se esiste. Il problema è che Firebug sta segnalando un "Errore di sintassi" sulla riga eval()
. Quando eseguo gli stessi passaggi sulla console di Firebug, funziona senza problemi e posso eseguire la funzione come previsto. Ho provato alcune varianti diverse: window.eval
invece del semplice eval
, archiviando lo sortType
come ho fatto sopra e provando piccole variazioni alla stringa.
Un valore di esempio di fields[i].sortType
è "function(value) { return Math.abs(value); }"
. Ecco il test che ho fatto in console Firebug:
>>> sort_string
"function(value) { return Math.abs(value); }"
>>> eval(sort_string)
function()
>>> eval(sort_string)(-1)
1
e l'errore in sé in Firebug:
syntax error
[Break on this error] function(value) { return Math.abs(value); }
L'ultimo bit che possono essere rilevanti è che tutto questo è avvolto in una funzione di Ext JS onReady()
, con una modifica dello spazio dei nomi Ext.ns
nella parte superiore. Ma supponevo che lo window.eval
chiamasse lo eval
globale, indipendentemente da qualsiasi possibile eval
in spazi dei nomi più specifici.
Tutte le idee sono apprezzate.
notare che IE può funzioni non eval. – SLaks
try 'var foo = function (value) {...}' –
@SLaks: 'eval' funziona bene per me in IE per la stringa sopra, senza errori ... così come' eval ("a = function () {return 'b';} ")' - puoi chiarire cosa intendi per favore? –