Как мне выполнить JavaScript, который является строкой?
function ExecuteJavascriptString()
{
var s = "alert('hello')";
// how do I get a browser to alert('hello')?
}
javascript
divinci
источник
источник
Вы можете выполнить это с помощью функции. Пример:
источник
var F=function(){eval(theInstructions);};
?new Function("alert('Hello World');")()
eval
Функция будет оценивать строку , которая передается ему.Но использование
eval
может быть опасным , поэтому используйте с осторожностью.Редактировать: Аннаката имеет хорошее замечание - это не только
eval
опасно , но и медленно . Это связано с тем, что анализируемый код должен быть проанализирован на месте, что потребует некоторых вычислительных ресурсов.источник
eval()
это опасно. Есть ли альтернатива?Используйте eval ().
W3 Школьный тур по eval . На сайте есть несколько полезных примеров eval. Документация Mozilla подробно описывает это.
Вы вероятно получите много предупреждений об использовании этого безопасно. НЕ позволяйте пользователям вводить НИЧЕГО в eval (), так как это огромная проблема безопасности.
Вы также хотите знать, что eval () имеет другую область видимости .
источник
eval
для меня лучше, чем та статья W3Schools. Что-то читаемое с хорошим объяснением и примерами будет developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… . И нет, я не бьорнингеПопробуй это:
Лично я не проверял это, но, кажется, работает.
источник
Немного похоже на то, что сказал @Hossein Hajizadeh alerady, хотя более подробно:
Есть альтернатива
eval()
.Функция
setTimeout()
предназначена для выполнения чего-либо после интервала в миллисекунды, и код, который должен быть выполнен, просто отформатирован в виде строки.Это будет работать так:
1
означает, что он будет ждать 1 миллисекунду перед выполнением строки.Возможно, это не самый правильный способ сделать это, но это работает.
источник
setTimeout
? Обратите внимание, что в любом случае это сделает выполнение асинхронным. Это означает, что весь код, который следует заsetTimeout
вызовом, будет вызван до того, как код будет переданsetTimeout
(даже если вызван с 0 (ноль)).Я думаю, что это лучший способ.
источник
Используйте eval, как показано ниже. Eval следует использовать с осторожностью, простой поиск « eval is evil » должен привести к появлению некоторых указателей.
источник
Проверено это на многих сложных и запутанных скриптах:
источник
Если вы хотите выполнить определенную команду (то есть строку) через определенное время - cmd = ваш код - InterVal = задержка для запуска
источник
Val
вInterVal
заглавной?Для пользователей, которые используют узел и которые связаны с контекстными последствиями
eval()
предложений nodejsvm
. Он создает виртуальную машину V8, которая может изолировать выполнение вашего кода в отдельном контексте.Если сделать шаг вперед, то
vm2
ужесточается,vm
позволяя виртуальной машине запускать ненадежный код.https://nodejs.org/api/vm.html - Официальный nodejs / vm
https://github.com/patriksimek/vm2 - расширенный vm2
источник
Но это может быть опасно, если вы принимаете данные от пользователей, хотя я полагаю, что если они сломают собственный браузер, это их проблема.
источник
eval
с кодом от пользователей, который может, например, позволить пользователям красть учетные записи других пользователей без их ведома, просто загружая страницу.Не уверен, что это обман или нет:
источник
Новая функция и apply () вместе работает
источник
eval()
. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...Я отвечал на аналогичный вопрос и получил еще одну идею, как этого добиться без использования
eval()
:В приведенном выше коде вы в основном создаете Blob, содержащий ваш скрипт, чтобы создать URL объекта (представление объекта File или Blob в памяти браузера). Поскольку у вас есть
src
свойство для<script>
тега, скрипт будет выполняться так же, как если бы он был загружен с любого другого URL.источник
источник
Эвал должен сделать это.
источник
Помните, однако, что Eval очень мощный и довольно небезопасный. Лучше быть уверенным в том, что выполняемый скрипт является безопасным и неизменным для пользователей.
источник
Можно использовать mathjs
Фрагмент сверху ссылки:
scope
это любой объект. Поэтому, если вы передадите глобальную область в функцию evalute, вы сможете динамически выполнять alert ().Также mathjs - намного лучший вариант, чем eval (), потому что он работает в песочнице.
Более новые версии mathjs не используют eval () или Function ().
источник
Использование eval и создание новой функции для выполнения javascript сопряжено с множеством угроз безопасности.
Я предпочитаю этот метод для выполнения Javascript, который я получаю в виде строки.
источник