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 に答える