IE思维对象未加载

时间:2011-03-10 16:15:59

标签: javascript internet-explorer

我的代码类似于以下内容:

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
if (!window.lib) { alert("foo") }; //Triggers, despite library.js being loaded fine
lib.custLib = function(b) { ... }(lib.subLib); //Works fine, even though IE JUST said that window.lib wasn't loaded
</script>

只是为了让事情变得更加疯狂,在页面加载后,如果我输入

javascript:if(window.lib)alert("foo");

进入位置栏,警报触发,指示window.lib已加载。如果我输入

javascript:if(!window.lib)alert("foo");

警报不会触发,确认!window.lib不会评估为真。

我可以得出的唯一结论是,当我第一次检查window.lib是否存在以及在函数声明之后立即在立即调用中实际使用lib.subLib时,某种程度上,library.js正在完成执行。

编辑:其他信息......

我找到了一种解决方法,但首先要注意一些有趣的事情。

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
alert(!window.lib) //True
if (!window.lib) {
  alert(!window.lib) //True
}
</script>

比较:

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
alert(!window.lib) //False
</script>
<script>
if (!window.lib) {
  alert(!window.lib) //True
}
</script>

解决方法:

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
var foo = !window.lib;
</script>
<script>
if (foo) {
  alert(!window.lib) //Doesn't get triggered
}
</script>

总而言之,这似乎是Internet Explorer中的一个错误。解决方法是使用单独的脚本块将变量设置为!window.lib的值,然后在下一个脚本块中检查该变量,而不是直接检查!window.lib。

0 个答案:

没有答案