Выполнить код JavaScript, сохраненный в виде строки

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

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

Ответ 2

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

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

var F=new Function (theInstructions);

return(F());

Ответ 3

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

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

Изменить: у annakata есть хорошая точка. медленный. Это связано с тем, что код, который нужно оценить, должен анализироваться на месте, так что это потребует некоторых вычислительных ресурсов.

Ответ 4

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

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

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

Вы также захотите узнать, что eval() имеет другой scope.

Ответ 5

Попробуйте следующее:

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

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

Ответ 6

Немного похоже на то, что сказал @Hossein Hajizadeh alerady, хотя более подробно:

Существует альтернатива eval().

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

Он будет работать следующим образом:

ExecuteJavascriptString(); //Just for running it

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

Ответ 7

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

function ExecuteJavascriptString()
{
    var s = "alert('hello')";
    eval(s);
}

Ответ 8

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

 function ExecStr(cmd, InterVal) {
    try {
        setTimeout(function () {
            var F = new Function(cmd);
            return (F());
        }, InterVal);
    } catch (e) { }
}
//sample
ExecStr("alert(20)",500);

Ответ 9

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

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);

Ответ 10

eval(s);

Но это может быть опасно, если вы принимаете данные от пользователей, хотя я полагаю, что если они нарушают свой собственный браузер, это их проблема.

Ответ 11

Не уверен, что это обман или нет:

window.say = function(a) { alert(a); };

var a = "say('hello')";

var p = /^([^(]*)\('([^']*)'\).*$/;                 // ["say('hello')","say","hello"]

var fn = window[p.exec(a)[1]];                      // get function reference by name

if( typeof(fn) === "function") 
    fn.apply(null, [p.exec(a)[2]]);                 // call it with params

Ответ 12

eval должен это сделать.

eval(s);

Ответ 13

eval(s);

Помните, что этот eval очень мощный и довольно небезопасный. Лучше быть уверенным, что выполняемый script безопасен и не поддается обсуждению пользователями.

Ответ 14

Новая функция и apply() вместе работают также

var a=new Function('alert(1);')
a.apply(null)

Ответ 15

Я отвечал на аналогичный вопрос и получил еще одну идею, как этого добиться без использования eval():

const source = "alert('test')";
const el = document.createElement("script");
el.src = URL.createObjectURL(new Blob([source], { type: 'text/javascript' }));
document.head.appendChild(el);

В приведенном выше коде вы в основном создаете Blob, содержащий ваш скрипт, чтобы создать URL объекта (представление объекта File или Blob в памяти браузера). Поскольку у вас есть свойство src для <script>, скрипт будет выполняться так же, как если бы он был загружен с любого другого URL.

Ответ 16

function executeScript(source) {
    var script = document.createElement("script");
    script.onload = script.onerror = function(){ this.remove(); };
    script.src = "data:text/plain;base64," + btoa(source);
    document.body.appendChild(script);
}

executeScript("alert('Hello, World!');");

Ответ 17

new Function('alert("Hello")')();

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