Javascript 未捕获引用错误:jQuery不是仅在Chrome中定义的

Javascript 未捕获引用错误:jQuery不是仅在Chrome中定义的,javascript,jquery,google-chrome,asynchronous,Javascript,Jquery,Google Chrome,Asynchronous,我使用此代码在头部加载JS async <script type='text/javascript'> // Add a script element as a child of the body function downloadJSAtOnload() { var element4= document.createElement("script"); var element5= document.createElement("script"); element4.src="h

我使用此代码在头部加载JS async

<script type='text/javascript'>
 // Add a script element as a child of the body
 function downloadJSAtOnload() {
var element4= document.createElement("script");
var element5= document.createElement("script");
element4.src="http:///ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"
element5.src="http://yourjavascript.com/301810712121/slidemenu_horiz.js"
element4.async=true;
element5.async=true;
document.body.appendChild(element4);
document.body.appendChild(element5);
}
 // Check for browser support of event handling capability
 if (window.addEventListener)
 window.addEventListener("load", downloadJSAtOnload, false);
 else if (window.attachEvent)
 window.attachEvent("onload", downloadJSAtOnload);
 else window.onload = downloadJSAtOnload;
</script>

//添加脚本元素作为主体的子元素
函数downloadJSAtOnload(){
var element4=document.createElement(“脚本”);
var element5=document.createElement(“脚本”);
element4.src=”http:///ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"
element5.src=”http://yourjavascript.com/301810712121/slidemenu_horiz.js"
element4.async=true;
element5.async=true;
文件.正文.附件(要素4);
文件.正文.附件(要素5);
}
//检查浏览器是否支持事件处理功能
if(window.addEventListener)
addEventListener(“加载”,downloadJSAtOnload,false);
else if(窗口附件)
window.attachEvent(“onload”,downloadJSAtOnload);
else window.onload=下载jsatonload;
在IE和Firefox中工作正常,但在Chrome中我有一个错误: “未捕获引用错误:未定义jQuery”


当我第二次(或第三次)刷新页面时,该脚本在Chrome中运行良好,请告诉我如何解决此问题。

根据您的需要,由于我过去成功使用过它,我建议使用LABjs-

如前所述,有很多脚本加载器可供选择——LABjs更注重性能,不包括其他诸如requirejs(AMD加载器)、YepNope(基于功能检测的条件加载器)等其他加载器所具有的许多额外功能。如果您只需要异步加载脚本并控制执行顺序,那么LABjs是一个非常小的脚本,可以很好地处理这个问题

使用LABjs,您可以执行以下操作来复制上面的代码:

<script src="js/libs/LAB.js"></script>
<script>
$LAB
.script('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js').wait()
.script('http://yourjavascript.com/301810712121/slidemenu_horiz.js')
.wait(function () {
    // Check jQuery has loaded (could do this for the slider as well)
    if (window.jQuery) {
        // Do something with your slider
    }
});
</script>

$LAB
.script('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js)。等等
.script('http://yourjavascript.com/301810712121/slidemenu_horiz.js')
.wait(函数(){
//检查jQuery是否已加载(也可以为滑块执行此操作)
if(window.jQuery){
//用你的滑块做点什么
}
});
在上面的示例中,
.wait()
函数确保jQuery在slidemenu_horiz.js之前执行-最后一个
.wait()
作为回调传递一个匿名函数-在这个函数中,您可以测试所有内容是否已加载,然后进行初始化

对于脚本加载程序来说,查看所有选项都是值得的。确实存在负载,每个负载都有不同的功能集,您可能会发现这些功能集可以更好地解决您的问题


编辑:为清晰起见,在代码示例中添加了对LABjs的脚本引用

如果您使用的是jquery(文档)。代码上的ready事件,它将不起作用,因为jquery在window.load中甚至还没有准备好,它仍在等待下载。由于两者都是异步的,如果slidemenu_horiz.js在jquery之前完成下载,您就不知道哪个将首先完成下载。它不会工作,因为那时jquery还没有准备好。。。您可能需要查看labjs或requirejs或steal.js以异步加载ur js。感谢您的响应,我可以指定谁先完成了吗?为什么?为什么?为什么要这样加载jQuery?为什么不像其他网站一样使用
包含?只是问问而已。