我有两个 JavaScript 文件:“一个”和“两个”。“一”文件正在动态添加“二”,如下所示:
scriptNode = document.createElement('script');
scriptNode.type = 'text/javascript'
scriptNode.src = '/JavaScript/Two.js';
document.getElementsByTagName("head")[0].appendChild(scriptNode);
然后,在加载“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
}
在“一个”文件中,我调用 PopulateGlobalArray() 函数。
在每个浏览器(Opera、Firefox、Ghrome、IE7、IE8、IE10)OtherStuff()
中console.log()
返回1
. 在 IE9 中,它返回0
- 数组只是空的。
我花了很多时间,但最后我发现如果我在 HTML 中包含“Two”文件作为
<script src="/JavaScript/Two.js"></script>
或者不使用 JavaScript 加载它,它也适用于 IE9。
我的问题是有人知道为什么会这样吗?
编辑:我很确定这与 DOCTYPE 有关。我使用的是 Strict Doctype,但 Browse Mode:IE9 with Dicument Mode: Quirks 不会导致错误。