当我使用 document.createElement
创建脚本元素时并将其附加到 document.head
, JavaScript 执行成功:
var el = document.createElement('script');
el.text = "console.log('Hello World!')";
document.head.insertAdjacentElement('afterbegin', el);
// console output: "Hello World!"
但是如果我使用 DOMParser 来解析一个 html 字符串然后附加它的 firstElementChild
至 document.head
,JavaScript 不执行:
var parser = new DOMParser();
var htmlString = "<script>console.log('Bye World!')<\/script>";
var domEl = parser.parseFromString(htmlString, "text/xml").firstElementChild;
document.head.insertAdjacentElement('afterbegin', domEl);
// No console output
A <script>
标签添加到 document.head
在这两种情况下。为什么第二种情况JavaScript不执行?
最佳答案
因为 DOMParser
标记了 script
元素,所以它不会运行,因为 DOMParser 解析 text/xml
(和其他) 禁用脚本 ( spec )。脚本是否应该运行是与 script
元素关联的一条状态信息,这就是为什么这不会运行脚本两次:
var el = document.createElement('script');
el.text = "console.log('Hello World!')";
document.head.insertAdjacentElement('afterbegin', el);
document.head.removeChild(el);
document.head.appendChild(el);
关于javascript - 使用 DOMParser 解析的脚本不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52779233/