这个是微不足道的。
如规范(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
.