这个是微不足道的。
如规范(8.4 解析 HTML 片段和8.2.3.5 其他解析状态标志)中所述,引用:
使用innerHTML浏览器时会
创建一个新的 Document 节点,并将其标记为 HTML 文档。
如果存在上下文元素,且上下文元素的 Document 处于 quirks 模式,则让 Document 处于 quirks 模式。否则,如果存在上下文元素,并且上下文元素的 Document 处于 limited-quirks 模式,则让 Document 处于 limited-quirks 模式。否则,让文档处于无怪癖模式。
创建一个新的 HTML 解析器,并将其与刚刚创建的 Document 节点相关联。...
并且在解析<script>内部时
如果在创建解析器时为与解析器关联的文档启用了脚本,则脚本标志设置为“启用”,否则设置为“禁用”。
即使解析器最初是为 HTML 片段解析算法创建的,即使脚本元素在这种情况下不执行,也可以启用脚本标志。
所以它不会被执行,只要你用innerHTML.
并且 usinginnerHTML将阻止创建的 <script>元素永久执行。
如规范(4.3.1 脚本元素,)中所述,引用:
动态更改 src、type、charset、async 和 defer 属性没有直接影响;这些属性仅在下面描述的特定时间使用。
总结下面的描述是,它只src在注入时解析属性<script>(document不管是哪个,包括使用时创建的临时innerHTML属性。)
所以,只要你想给文档注入脚本并让它执行,你就必须使用script = document.createElement('script').
设置它的属性src和type,可能是里面的内容(通过使用script.appendChild(document.createTextNode(content))),然后将其附加到document.body.