为什么通过innerHTML创建的脚本元素在附加到DOM时不会被执行,而通过document.createElement创建的相同脚本呢?

时间:2017-06-18 16:11:36

标签: javascript dom

(请不要将此问题标记为Can scripts be inserted with innerHTML?的副本,因为它不是。)

我想知道为什么通过innerHTML创建的脚本元素在附加到DOM时不会被执行:

container=document.createElement('div');
container.innerHTML='<script>alert()</'+'script>';
document.body.appendChild(container.firstChild);

...虽然通过document.createElement创建的相同脚本在附加到DOM时执行:

script=document.createElement('script');
script.innerHTML='alert()';
document.body.appendChild(script);

它在我看来是不一致的:在这两种情况下我都附加了一个脚本元素(看起来相同),所以我不明白为什么附加相同的脚本会产生不同的结果,具体取决于生成此脚本的方式。

1 个答案:

答案 0 :(得分:0)

当您创建'script'标记时,浏览器会评估脚本表达式,但是当您创建'div'标记时,即使脚本在浏览器中,也不会评估该脚本。

默认情况下,当您加载DOM后附加元素时,如果您在其中添加脚本,浏览器将不会检查/运行,除非它是脚本纯元素。