我想从服务器作为字符串加载一些脚本标记并将其附加到HTML标头,但是即使我可以附加它,它也不会执行。这是简化的HTML文件,用于说明这种情况:
<head>
</head>
<body>
<script>
function htmlStringToElement(htmlString) {
var template = document.createElement('template');
htmlString = htmlString.trim();
template.innerHTML = htmlString;
return template.content.firstChild;
}
//Mocking http request
setTimeout(function() {
var httpResponseMock = '<script>alert("HELLO FROM HTTP RESPONSE!");<\/script>';
var script = htmlStringToElement(httpResponseMock);
document.head.appendChild(script);
}, 1000);
</script>
</body>
我想原因是动态添加脚本时已经渲染了头文件,但是还有其他方法可以实现吗?
答案 0 :(得分:2)
使用Jquery,
var httpResponseMock = '<script><\/script>';
$('head').append(httpResponseMock);
并使用javascript
var httpResponseMock = '<script><\/script>';
document.getElementsByTagName('head')[0].appendChild(httpResponseMock);
答案 1 :(得分:1)
除非您知道自己在做什么,否则永远不要使用innerHTML。
如果您真的想将脚本动态注入文档中,请执行此操作或使用eval:
const script = document.createElement("script");
script.textContent = "console.log('yay it works!');";
document.head.appendChild(script);
appendChild
正在运行它。
答案 2 :(得分:0)
another question中有关于JS动态加载的更长的讨论。在这种情况下,简单的答案是使用eval
评估脚本内容。请注意,尽管使用eval
通常被认为是bad practice。