Выполнить код JavaScript, хранящийся в виде строки - PullRequest
147 голосов
/ 02 июня 2009

Как мне выполнить JavaScript, который является строкой?

function ExecuteJavascriptString()
{
    var s = "alert('hello')";
    // how do I get a browser to alert('hello')?
}

Ответы [ 18 ]

192 голосов
/ 02 июня 2009

С eval("my script here") функцией.

110 голосов
/ 14 марта 2012

Вы можете выполнить его с помощью функции. Пример:

var theInstructions = "alert('Hello World'); var x = 100";

var F=new Function (theInstructions);

return(F());
57 голосов
/ 02 июня 2009

Функция eval оценивает строку, переданную ей.

Но использование eval может быть опасным , поэтому используйте с осторожностью.

Редактировать: Аннаката имеет хорошую точку - не только eval опасно , но и медленно . Это связано с тем, что анализируемый код должен быть проанализирован на месте, что потребует некоторых вычислительных ресурсов.

20 голосов
/ 02 июня 2009

Используйте eval ().

W3 Школьный тур по eval . На сайте есть несколько полезных примеров eval. Документация Mozilla подробно описывает это.

Вы, вероятно, получите множество предупреждений о безопасном использовании. НЕ разрешать пользователям вводить НИЧЕГО в eval () , так как это огромная проблема безопасности.

Вам также нужно знать, что eval () имеет другую область действия .

14 голосов
/ 29 января 2010

Попробуйте это:

  var script = "<script type=\"text/javascript\"> content </script>";
  //using jquery next
  $('body').append(script);//incorporates and executes inmediatelly

Лично я не проверял это, но, кажется, работает.

7 голосов
/ 27 июля 2016

Немного похоже на то, что @ Хоссейн Гаджизаде сказал Алеради, хотя более подробно:

Есть альтернатива eval().

Функция setTimeout() предназначена для выполнения чего-либо после интервала в миллисекунды, и код, который должен быть выполнен, просто отформатирован в виде строки.

Это будет работать так:

ExecuteJavascriptString(); //Just for running it

function ExecuteJavascriptString()
{
    var s = "alert('hello')";
    setTimeout(s, 1);
}

1 означает, что он будет ждать 1 миллисекунду перед выполнением строки.

Возможно, это не самый правильный способ сделать это, но он работает.

5 голосов
/ 02 июня 2009

Используйте eval , как показано ниже. Eval следует использовать с осторожностью, простой поиск " eval is evil " должен бросать несколько указателей.

function ExecuteJavascriptString()
{
    var s = "alert('hello')";
    eval(s);
}
5 голосов
/ 09 августа 2014

Если вы хотите выполнить определенную команду (то есть строку) после конкретное время - cmd = ваш код - InterVal = задержка запуска

 function ExecStr(cmd, InterVal) {
    try {
        setTimeout(function () {
            var F = new Function(cmd);
            return (F());
        }, InterVal);
    } catch (e) { }
}
//sample
ExecStr("alert(20)",500);
5 голосов
/ 09 ноября 2015

Проверено это на многих сложных и запутанных скриптах:

var js = "alert('Hello, World!');" // put your JS code here
var oScript = document.createElement("script");
var oScriptText = document.createTextNode(js);
oScript.appendChild(oScriptText);
document.body.appendChild(oScript);
3 голосов
/ 18 декабря 2018
new Function('alert("Hello")')();

Я думаю, что это лучший способ.

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