0

「One」と「Two」の 2 つの JavaScript ファイルがあります。「One」ファイルは、次のように「Two」を動的に追加しています。

scriptNode = document.createElement('script');
scriptNode.type = 'text/javascript'
scriptNode.src = '/JavaScript/Two.js';
document.getElementsByTagName("head")[0].appendChild(scriptNode);

次に、「Two」ファイルがロードされた後、「One」ファイルがその機能を使用しています。状況は次のようなものです。

  1. 「One」ファイルは「Two」ファイルをロードします。
  2. 「Two」ファイルでは、ロード時にグローバル配列が宣言されます。
  3. 「One」ファイルでは、「Two」ファイルの関数が呼び出され、グローバル配列にデータが取り込まれます。

グローバル配列に値を設定する「Two」ファイルの関数は次のようになります。

GlobalArray=new Array();

function Init(name){
    this.name=name;
}

function PopulateGlobalArray(name){
    var temp=new Init(name);
    GlobalArray.push(temp);

    console.log(GlobalArray.length); // returns "1"
    OtherStuff();
}

function OtherStuff(){
    console.log(GlobalArray.length); // returns "0" only in IE9
}

「One」ファイルでは、PopulateGlobalArray() 関数を呼び出しています。

すべてのブラウザー (Opera、Firefox、Ghrome、IE7、IE8、IE10)でOtherStuff()、. IE9 では、返されます- 配列は空です。console.log()10

かなり時間がかかりましたが、最終的に、HTML に「Two」ファイルを次のように含めると、

<script src="/JavaScript/Two.js"></script>

またはJavaScriptでロードしない場合、IE9でも動作しています。

私の質問は、なぜこれが起こっているのか、誰にも手がかりがありますか?

編集:これはDOCTYPEに関連していると確信しています。Strict Doctype を使用していますが、Browse Mode:IE9 と Dicument Mode: Quirks ではエラーは発生しません。

4

0 に答える 0