我尝试使用innerHTMLa 将一些脚本加载到页面中<div>.看起来脚本加载到DOM中,但它永远不会被执行(至少在Firefox和Chrome中).有没有办法让脚本在插入时执行innerHTML?
示例代码:
<!DOCTYPE html>
<html>
<body onload="document.getElementById('loader').innerHTML = '<script>alert(\'hi\')<\/script>'">
Shouldn't an alert saying 'hi' appear?
<div id="loader"></div>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
这里是js代码
var wrap = document.createElement("div");
wrap.innerHTML = '<script type="text/javascript" src="'+scriptUrl+'"></script>';
var wrapscript = wrap.childNodes[0];
document.body.appendChild(wrapscript)
Run Code Online (Sandbox Code Playgroud)
正文确实插入了脚本元素,但js资源没有加载,甚至没有http请求...
谁能告诉我为什么~~
问题出在Zeptojs的$方法上
$('<script type="text/javascript" src="'+scriptUrl+'"></script>').appendTo($("bdoy"))
Run Code Online (Sandbox Code Playgroud)
它像上面的代码一样工作,并导致错误
在将脚本转换为不需要 jQuery 时,我发现如果我通过 XMLHttpRequest 加载我的内容(带有 html 和 javascript 的部分 html 页面),部分页面中的 javascript 将不起作用。但如果我使用 jQuery.load 加载部分,它确实可以工作。
我尝试深入研究 jQuery 的加载函数,看看它是否做了什么特别的事情,但没有什么让我惊讶的。这几天我一直在用头撞墙寻找答案,但毫无结果。
我做错了什么/如何让它像使用 jQuery.load 加载时一样工作?
我通过从片段中的 html 中分离出我的 javascript 并使用此处建议的技术加载 javascript 来使 XMLHttpRequest 方法正常工作: https: //stackoverflow.com/a/11695198/362958。然而,这仍然没有解释为什么 jQuery.load 可以工作。jQuery 是否最终解析 HTML 并对它在加载的内容中找到的任何脚本执行相同的操作?
我已经使用以下代码设置了一个plunker(https://plnkr.co/edit/wE9RuULx251C5ARnUbCh )来演示该问题。注意:一旦您使用 jQuery 加载片段,它将继续工作,并且您必须重新启动 plunk,XMLHttpRequest 方法才能再次失败。
索引.html:
<!DOCTYPE html>
<html>
<head>
<script data-require="jquery@*" data-semver="3.0.0" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<h3>Buttons</h3>
<div>
<input type="button" value="Load with XMLHttpRequest" onclick="loadXMLDoc('ajaxContentDiv', 'fragmentToLoad.html');"> (Links do not work if loaded …Run Code Online (Sandbox Code Playgroud)