这似乎是一个容易解决的问题,但这是我的屁股。
以下简单示例在IE9中产生错误。我已经使用IE9的开发者页面来监控网络加载,看起来IE正在加载并执行主体的脚本,然后才加载/评估包含的javascript。
我尝试了通过搜索答案找到的所有各种技巧,包括添加<meta charset="UTF-8" />
和<meta http-equiv="x-ua-compatible" content="IE8"/>
<html>
<head>
<title>Demo of IE suckiness</title>
<script type='text/javascript'
src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'></script>
</head>
<body>
This works in every browser but not IE9. IE gives the error:
<pre>
Line: 9
Error: The value of the property '$' is null or undefined, not a Function object
</pre>
<script type="text/javascript" defer="defer">
$(document).ready(function(){
alert("Must not be IE");
});
</script>
</body>
</html>
我有一个解决方法。将准备好的脚本移动到<body onload="ready()">
,但我不能相信IE9已经坏了,我一定做错了什么而且看不到它。
答案 0 :(得分:3)
据我所知,当整个文档(包括所有图像和相关内容)都已加载时,IE9只会触发$ .load()。可怕但真实!我的解决方法是:
var docReady = {
actions:new Array(),
flag:0,
time:0,
period:10,
trigger:function() {this.flag=1},
checkHandle:0,
check:function() {
this.time+=this.period;
if(this.flag) {
clearInterval(this.checkHandle);
for(i in this.actions) {this.actions[i]();}
}
},
watch:function() {
this.checkHandle = setInterval(function() {docReady.check();},this.period);
},
action:function(f) {
this.actions.push(f);
}
};
docReady.watch();
确实是一个肮脏的,但它正在发挥作用;现在,只要您认为合适,就可以调用docReady.trigger(),至少应该在页面末尾执行。此外,您可以将其称为body onload。保证你使用docReady.action()添加的函数只运行一次:第一次触发()时发生。
答案 1 :(得分:2)
我有类似的问题。我用resetting all my IE9 settings修正了它 我认为通过启动安全性或隐私,它可以破坏外部页面的jquery加载。
答案 2 :(得分:0)
您是否试图遗漏defer="defer"
?
答案 3 :(得分:0)
我遇到了同样的问题并且通过不使用Google托管的jQuery并在本地托管它来解决它。