一尘不染

JavaScript可以使用innerHTML插入脚本吗?

javascript

我想一些脚本加载到使用页面innerHTML<div>。脚本似乎已加载到DOM中,但从未执行(至少在Firefox和Chrome中)。将脚本插入时,是否可以执行脚本innerHTML

样例代码:

<!DOCTYPE html>

<html>

  <body onload="document.getElementById('loader').innerHTML = '<script>alert(\'hi\')<\/script>'">

    Shouldn't an alert saying 'hi' appear?

    <div id="loader"></div>

  </body>

</html>

阅读 358

收藏
2020-04-22

共2个答案

一尘不染

您必须使用eval()来执行作为DOM文本插入的任何脚本代码。

MooTools会自动为您执行此操作,而且我敢肯定jQuery也是如此(取决于版本。jQuery
1.6+版本使用eval)。这样可以节省解析<script>标签和转义内容的麻烦,以及一堆其他“陷阱” 的麻烦。

通常,如果您要eval()亲自进行操作,则希望创建/发送没有任何HTML标记(例如)的脚本代码<script>,因为这些标记将无法eval()正常使用。

2020-04-22
一尘不染

因此,使用它代替脚本标签:

<img src="empty.gif" onload="alert('test');this.parentNode.removeChild(this);" />
2020-04-23