2017-06-18 39 views
1

(因为它不请不要标记这个问题为重复到Can scripts be inserted with innerHTML?为什么通过innerHTML的创建脚本元素没有得到时追加到DOM执行,而相同的脚本通过使用document.createElement创建呢?

我不知道为什么通过的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); 

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

+0

我知道你这个要求不被标记为重复,但它_is_。快速谷歌搜索显示,这个问题已经被问及几次。 – rossipedia

回答

0

当你创建一个“脚本”标签,浏览器计算这个脚本表达,但是当你创建一个“DIV”的标签,即使脚本是在浏览器内不会评价该脚本。

默认情况下,当您在DOM加载后追加元素时,如果在脚本内部添加脚本,则浏览器将不检查/运行,而是脚本纯元素。

+0

脚本一个div也适用,只要它被创建经由内部的createElement: 容器=使用document.createElement(“DIV”); 脚本=使用document.createElement( '脚本'); script.innerHTML ='alert()'; container.appendChild(script); document.body.appendChild(容器); –