一尘不染

如何执行动态加载的JavaScript块?

javascript

我正在一个网页上进行AJAX调用,该调用返回如下HTML块:

<div>
  <!-- some html -->
  <script type="text/javascript">
    /** some javascript */
  </script>
</div>

我正在将整个内容插入DOM,但是没有运行JavaScript。有办法运行吗?

一些细节:我无法控制脚本块中的内容(因此无法将其更改为可以调用的函数),我只需要执行整个块即可。我无法在响应中调用eval,因为JavaScript处于HTML的较大块内。我可以做某种正则表达式来分离JavaScript,然后在其上调用eval,但这真令人讨厌。有人知道更好的方法吗?


阅读 233

收藏
2020-05-01

共1个答案

一尘不染

通过设置元素的innerHTML属性添加的脚本不会执行。尝试创建一个新的div,设置其innerHTML,然后将此新的div添加到DOM。例如:

<html>
<头>
<script type ='text / javascript'>
函数addScript()
{
    var str =“ <脚本>警报('我在这里'); <\ /脚本>”;
    var newdiv = document.createElement('div');
    newdiv.innerHTML = str;
    document.getElementById('target')。appendChild(newdiv);
}
</ script>
</ head>
<身体>
<input type =“ button” value =“添加脚本” onclick =“ addScript()” />
<div>你好世界</ div>
<div id =“ target”> </ div>
</ body>
</ html>
2020-05-01