我使用此代码将JS异步加载到头部
<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>
在IE和Firefox中工作正常,但在Chrome中,我出现此错误:
“未捕获的ReferenceError:未定义jQuery”
当我第二次(或第三次)刷新页面时,脚本在Chrome中运行良好,请我需要知道如何解决此问题。
最佳答案
鉴于您的需求,并且因为我过去已经成功使用过它,所以建议您使用LABjs-http://labjs.com/
如前所述,有大量脚本加载器可供选择-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>
在上面的示例中,
.wait()
函数确保jQuery在slidemenu_horiz.js(最后一个.wait()
作为匿名函数传递给匿名函数)之前已执行-在此范围内,您可以测试所有内容是否已加载,然后进行初始化。值得一查脚本加载器的所有选项。确实有很多负载,每个负载都有不同的功能集,您可能会发现可以更好地解决您的问题。
编辑:为清楚起见,在代码示例中向LABjs添加了脚本引用