Сценарий, добавленный путем установки 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>
Вы не должны использовать regex при использовании ответа для заполнения отделения или чего-то. Можно использовать getElementsByTagName.
div.innerHTML = response;
var scripts = div.getElementsByTagName('script');
for (var ix = 0; ix < scripts.length; ix++) {
eval(scripts[ix].text);
}
Лучший метод должен был бы, вероятно, определить и оценка содержание блока сценария непосредственно через DOM.
я был бы осторожен хотя.. при реализации этого для преодоления ограничения некоторых от вызова сайта, Вы открываете дыру в системе безопасности.
Независимо от того, что Вы реализуете, мог быть использован для XSS.
Альтернатива не должна только выводить возврат из вызова Ajax в DOM использование InnerHTML.
можно вставить каждый узел динамично, и затем сценарий будет работать.
Иначе, браузер просто предполагает вставку текстового узла, и игнорирует сценарии.
Используя Оценку является довольно злым, потому что она требует, чтобы другой экземпляр VM JavaScript был разожжен и JIT переданная строка.
Можно пользоваться одной из популярных библиотек Ajax, которые делают это для Вас исходно. Мне нравится Прототип . Можно просто добавить evalScripts:true как часть вызова Ajax, и это происходит автоволшебно.