1

我有这个代码...

    <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 文件函数......有什么诀窍?

4

2 回答 2

0

您的脚本将异步加载,因此您无法立即使用它们。给他们一个 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);
}
于 2013-02-07T17:08:31.627 回答
0

扩展丹尼斯的观点,在Javascript您尝试获取的文件中添加一个变量并检查该变量是否存在或者它是否是一个整数,检查该值。无论如何,您可以在 Javascript 中轻松地做到这一点。这里有两种方法。

选项一

var neededScript = document.createElement("script");
n//if you want the script to be asynchronous, then set the async attribute like this:
neededScript.async="";
//then point the [src] attribute to the required script.
neededScript.src="src";
document.head.appendChild(neededScript);
可选地,如果您想将 附加scriptbody, 而不是document.head.appendChild使用document.body.appendChild. document.getElementById您可以使用or将子元素附加到任何元素,document.getElementsByClassName或者如果您想按标签名称(<html>是标签)过滤元素,然后使用document.getElementByTagNameor - 我个人最喜欢的来自 jQuery - document.querySelector。您应该阅读所有这些方法,因为它们对于操作 DOM 至关重要。

第二个选项

第二个选项是使用一个非常流行的库,称为 jQuery。它的语法比文档 API 语法短很多。它的主要目的是使 DOM 操作更容易。

var requiredScriptSrc="src";
$("head").append("<script src='"+requiredScriptSrc+"'></script>");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
jQuery 使用selectors,如果您尝试过 CSS 或document.querySelector.

选项三

选项三是使用custom tags一个for循环来获取 的属性custom tag并创建一个脚本元素。

for(var i = 0; i<document.getElementsByTagName("js-module").length; i++){
  var s = document.getElementsByTagName("js-module")[i].getAttribute("src");
  var r = document.createElement("script");
  r.src = s;
  document.head.appendChild(r);
}
<js-module src="src"></js-module>


如果您需要更多帮助,请在此帖子上发表评论。

于 2018-02-19T04:41:08.437 回答