情景:
我有一些JS代码,我想检测DOM中是否存在jQuery,如果没有添加它:
if (typeof jQuery != 'function') {
var sc = document.createElement('script');
sc.type = 'text/javascript';
sc.async = true;
sc.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js";
sc.onload = function() { App.getTrackers(); };
sc.onreadystatechange = function() { App.getTrackers(); };
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(sc, s);
}
else {
App.getTrackers();
}
App = {
getTrackers: function() {
$.ajax({url: "/ajax.php", success: function(data) { console.log(data) }});
}
}
onload()适用于FF + Webkit; onReadyStateChange()用于IE
问题出在IE上,我收到了这个错误:
'$' is undefined
不过! IE的控制台返回ajax.php的内容。所以jQuery函数已经被执行......不知何故。即使$未定义......
$还不存在吗?即使已经下载了脚本,它还没有被编译吗?
答案 0 :(得分:0)
就绪状态具有除complete
之外的其他值,因此将在不同阶段触发事件,直到代码加载并完成。
检查事件处理程序中的状态:
sc.onreadystatechange = function() {
if (sc.readyState === 'complete') {
App.getTrackers();
}
};