我有这个代码...
<script type="text/javascript">
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", "Client-Controls/ClientGridView.xml", true);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
var oHead = document.getElementsByTagName('HEAD').item(0);
var x = xmlDoc.getElementsByTagName("script");
for (i = 0; i < x.length; i++) {
var oScript = document.createElement("script");
oScript.language = "javascript";
oScript.type = "text/javascript";
oScript.src = x[i].childNodes[0].nodeValue;
oHead.appendChild(oScript);
}
</script>
这渲染了一些,但我无法使用该 javascript 文件函数...有什么办法可以解决这个问题?
最佳答案
您的脚本将异步加载,因此您无法立即使用它们。为它们提供一个 onload 处理程序,以便您知道它们何时准备就绪:
var oScript = document.createElement("script");
oScript.type = "text/javascript";
oScript.src = x[i].childNodes[0].nodeValue;
oScript.onload = function () {
// run bar, which is contained in foo.js
bar();
};
oHead.appendChild(oScript);
<小时/>
如果您想确保所有脚本都已加载,您可以创建一个计数器:
function counter(count, callback) {
return function() {
count -= 1;
if (count === 0) {
callback();
}
}
}
并将其传递给每个加载处理程序:
var x = xmlDoc.getElementsByTagName("script"),
countdown = counter(x.length, function(){ alert("All scripts loaded!"; });
for (i = 0; i < x.length; i++) {
var oScript = document.createElement("script");
oScript.type = "text/javascript";
oScript.src = x[i].childNodes[0].nodeValue;
oScript.onload = countdown;
oHead.appendChild(oScript);
}
关于javascript - 通过 xml 文件包含 javascript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14756098/