Как выполнить динамически загруженный блок JavaScript?

37
задан kristina 16 September 2008 в 19:20
поделиться

5 ответов

Сценарий, добавленный путем установки innerHTML свойства элемента, не становится выполняемым. Попытайтесь создать новое отделение, установив его innerHTML, затем добавив это новое отделение к DOM. Например:

<html>
<head>
<script type='text/javascript'>
function addScript()
{
    var str = "<script>alert('i am here');<\/script>";
    var newdiv = document.createElement('div');
    newdiv.innerHTML = str;
    document.getElementById('target').appendChild(newdiv);
}
</script>
</head>
<body>
<input type="button" value="add script" onclick="addScript()"/>
<div>hello world</div>
<div id="target"></div>
</body>
</html>
15
ответ дан Ed. 16 September 2008 в 19:20
поделиться

Вы не должны использовать regex при использовании ответа для заполнения отделения или чего-то. Можно использовать getElementsByTagName.

div.innerHTML = response;
var scripts = div.getElementsByTagName('script');
for (var ix = 0; ix < scripts.length; ix++) {
    eval(scripts[ix].text);
}
15
ответ дан Scott Nichols 16 September 2008 в 19:20
поделиться

Лучший метод должен был бы, вероятно, определить и оценка содержание блока сценария непосредственно через DOM.

я был бы осторожен хотя.. при реализации этого для преодоления ограничения некоторых от вызова сайта, Вы открываете дыру в системе безопасности.

Независимо от того, что Вы реализуете, мог быть использован для XSS.

1
ответ дан Quintin Robinson 16 September 2008 в 19:20
поделиться
  • 1
    К вашему сведению it' s живой (снова). – LeonardChallis 9 June 2014 в 12:15

Альтернатива не должна только выводить возврат из вызова Ajax в DOM использование InnerHTML.

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

Иначе, браузер просто предполагает вставку текстового узла, и игнорирует сценарии.

Используя Оценку является довольно злым, потому что она требует, чтобы другой экземпляр VM JavaScript был разожжен и JIT переданная строка.

2
ответ дан FlySwat 16 September 2008 в 19:20
поделиться

Можно пользоваться одной из популярных библиотек Ajax, которые делают это для Вас исходно. Мне нравится Прототип . Можно просто добавить evalScripts:true как часть вызова Ajax, и это происходит автоволшебно.

0
ответ дан Diodeus - James MacFarlane 16 September 2008 в 19:20
поделиться
  • 1
    Да. Я соглашаюсь с Вами при не наличии информации о базе данных в repo (это не был наш вызов, мы наследовали форму проекта другая компания). В этом случае, тем не менее, мы - команда с тремя людьми, и все мы делаем установка сервера и dev. Так, it' s довольно трудно для хранения учетных записей базы данных от группы разработчиков. I' d нравится проводить некоторое время при консолидации и фиксации конфигураций, но it' s трудно для убеждения клиента it' s стоящий того, когда " это works". – robertrv 9 March 2012 в 16:55
Другие вопросы по тегам:

Похожие вопросы: