我插入了jquery标签
var newScript = document.createElement("script");
newScript.id = "grazit_jq";
newScript.type = "text/javascript"
newScript.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js";
script.parentNode.appendChild(newScript);
之后我想检查jquery是否存在。
我这样做有几种方式。一种方式是这样的:
var checkJquery=function(){
if(typeof(jQuery) === 'undefined')
{
console.log('jQuery doesnt exist');
window.setTimeout(arguments.callee,1000);
return;
}
else{
sprk_lib=new sprk();
sprk_lib.load(jQuery);
}
};
sprk.prototype.load=function($){
console.log($);
}; 的更新 现在我更新了代码。只要jQuery对象具有可用性,它就会调用该函数。
在该函数中,我将执行我的jquery代码。你认为会有问题吗?这样做是可以的吗?
原始
我在那儿等。问题是在控制台日志中,它返回null并且打印jQuery存在。如何在加载jquery之前停止脚本,然后继续执行脚本?
答案 0 :(得分:2)
考虑使用已建立的JavaScript脚本加载程序,例如LABjs或LazyLoad,它们提供可靠的回调,直到脚本完全加载后才会触发。
查看this summary of 5 JavaScript script loaders。
例如:
LazyLoad.js('https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js', function () {
console.log('jQuery exists!');
console.log('Document title: ' + $("title").text());
});
有一点需要注意 - 如果你想在jQuery加载之后暂停所有进一步的脚本执行,你可以把你的其余脚本放在这个回调函数中。然而,这将打破一大堆最佳实践(关注点分离,松散耦合等),所以最好的办法是将现有函数作为回调传递,这可以反过来调用其他函数等。例如:
function doSomething() {
console.log('I am doing something!')
doSomethingElse();
}
function doSomethingElse() {
console.log('I am doing something else!');
}
LazyLoad.js('https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js', doSomething);
您可以进一步改进您的应用程序架构(例如,通过引入PubSub),但这超出了这个问题的范围,所以我会把它留在那里。