Как запустить код JavaScript, представленный строкой? - PullRequest
0 голосов
/ 11 апреля 2011

Thorugh AJAX Я получаю случайную строку (построенную на сервере RUNTIME ), которая содержит некоторый код JavaScript, например:

Plugins.add('test', function()
 { 
        return
            {
                html: '<div>test</div>',//EDITED
                width: 200
            }
 });//EDITED

В клиенте я хочу иметь возможность выполнить этокод.Я пытался использовать функцию eval , как это

eval("(" + str + ")");

, но я получаю ошибку.Я удалил все « \ r \ n » и удалил последний «; » (точка с запятой), и после этого функция « eval » завершилась успешно.Но, если я добавлю некоторый комментарий к приведенному выше коду, « eval » завершится неудачей.

Как я могу запустить код из строки?Спасибо

Ответы [ 4 ]

2 голосов
/ 11 апреля 2011

Просто удалите эти круглые скобки:

eval(str);

при условии, что вы допустили опечатку в своем вопросе, и ваш сервер отправляет пропущенные конечные скобки и запятую в объекте:

Plugins.add('test', function()
 { 
        return {
                html: '<div>test</div>',  // <-- comma was missing
                width: 200
        };
 }
);   // <-- was missing

Обратите внимание, что eval() считается "злом", поскольку это очень опасно.

0 голосов
/ 11 апреля 2011

Вы можете вернуть вашу строку с типом содержимого "text/javascript" или "application/x-javascript" - возвращаемое значение будет выполнено как JavaScript, как только оно будет возвращено.

0 голосов
/ 11 апреля 2011
new Function(str)()

или для JSON:

new Function('return ' + str)();

Если это соответствует вашим потребностям лучше, чем eval. Это все еще зло, как Eval.

0 голосов
/ 11 апреля 2011

Вам не хватает запятой в литерале вашего объекта. Return в своей строке просто выпадет из функции. Я предполагаю, что вы хотите вернуть объект. Вам необходимо указать возвращаемое значение в той же строке.

Plugins.add('test', function() { 
   var ret =   {
                html: '<div>test</div>',
                width: 200,
            }     
   return ret

 };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...