「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」ファイルがその機能を使用しています。状況は次のようなものです。
- 「One」ファイルは「Two」ファイルをロードします。
- 「Two」ファイルでは、ロード時にグローバル配列が宣言されます。
- 「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()
1
0
かなり時間がかかりましたが、最終的に、HTML に「Two」ファイルを次のように含めると、
<script src="/JavaScript/Two.js"></script>
またはJavaScriptでロードしない場合、IE9でも動作しています。
私の質問は、なぜこれが起こっているのか、誰にも手がかりがありますか?
編集:これはDOCTYPEに関連していると確信しています。Strict Doctype を使用していますが、Browse Mode:IE9 と Dicument Mode: Quirks ではエラーは発生しません。