У меня есть немного кода JavaScript, который указан в файле конфигурации на стороне сервера. Так как я не могу указать функцию JavaScript на языке конфигурации (Lua), я имею ее в виде строки. Сервер возвращает строку в каком-то JSON, и у меня есть клиент, который интерпретирует ее, используя функцию очистки:
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;
}
};
Так что в основном он просто оценивает sortType
, если он существует. Проблема в том, что Firebug сообщает о «синтаксической ошибке» в строке eval()
. Когда я выполняю те же шаги на консоли Firebug, это работает без проблем, и я могу выполнить функцию, как я ожидаю. Я пробовал несколько разных вариантов: window.eval
вместо простого eval
, сохраняя sortType
, как я делал выше, и пробовал небольшие вариации для строки.
Примерное значение fields[i].sortType
равно "function(value) { return Math.abs(value); }"
. Вот тестирование, которое я провел в консоли Firebug:
>>> sort_string
"function(value) { return Math.abs(value); }"
>>> eval(sort_string)
function()
>>> eval(sort_string)(-1)
1
и сама ошибка в Firebug:
syntax error
[Break on this error] function(value) { return Math.abs(value); }
Последний бит, который может иметь значение, заключается в том, что все это заключено в функцию Ext JS onReady()
, с изменением пространства имен Ext.ns
вверху. Но я предположил, что window.eval
вызовет глобальный eval
, независимо от возможных eval
в более специфических пространствах имен.
Любые идеи приветствуются.