Dan*_*iel 6 html javascript dom properties innerhtml
我正在阅读这个问题,接受的答案是:
通过设置元素的innerHTML属性添加的脚本不会被执行.
但是当我尝试<script>在以下代码中更改第一个标记的innerHTML时:
<script></script>
<script>
document.querySelectorAll("script")[0].innerHTML = 'console.log("Test")';
</script>
Run Code Online (Sandbox Code Playgroud)
我可以看到<script>正在执行的元素的注入代码(console.log()函数输出Test).
此外,如果我删除第一个空<script>标记(从而使第一个元素[0] 引用脚本本身),脚本在DOM中更改,但代码永远不会执行.
<script>
document.querySelectorAll("script")[0].innerHTML = 'console.log("Test")';
</script>
Run Code Online (Sandbox Code Playgroud)
什么促使这种行为?
在第 2 步,“解析器插入”标志被删除:
如果该元素设置了“parser-inserted”标志,则将 was-parser-inserted设置为 true 并取消设置该元素的“parser-inserted”标志。
在第 4 步,在恢复“解析器插入”标志之前,这些步骤被中止
如果该元素没有
src属性,并且其子节点(如果有)仅由注释节点和空Text节点组成,则用户代理此时必须中止这些步骤。该脚本未执行。
因此,当你修改它时,它会再次准备:
一旦脚本运行,修改内容将不会执行它们,因为脚本准备将中止:
| 归档时间: |
|
| 查看次数: |
1180 次 |
| 最近记录: |