是否有人知道如何检测jQuery库是否已加载,如果未加载,则在将其加载到DOM后追加该库并启动脚本作为备用解决方案?
下面是我的脚本:
if (typeof jQuery == 'undefined') {
// if jQuery Library is not loaded
var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
document.body.appendChild(script);
startScript();
} else {
// cool, jQuery Library is loaded
startScript();
}
function startScript() {
$.noConflict();
jQuery(document).ready(function($){
.... // my jquery code
});
}当然,上面的代码正确地附加了jQuery,但没有做任何事情,因为脚本在附加之后会立即启动。对此有什么提示吗?
感谢您的回复。谢谢!
发布于 2012-06-09 15:21:52
就像您说的,除了不能在追加新的script元素后立即调用startScript之外,一切都很好。相反,执行一个setTimeout循环:
// ...
document.body.appendChild(script);
maybeStart();其中maybeStart看起来像这样(不在if主体中,函数声明在那里是无效的):
function maybeStart() {
if (typeof jQuery === "undefined") {
setTimeout(maybeStart, 100);
}
else {
startScript();
}
}这将检查是否加载了jQuery,如果没有,则等待十分之一秒并再次检查。当找到jQuery时,它会调用您的startScript。
您可能希望在其中设置一个时间限制(以防jQuery永远不会加载,这样您就不会永远循环)。
或者,您可以在script元素上挂接一个"load"-style事件,但其机制因浏览器而异。在一些浏览器上,它只是像img元素一样的load;在IE (至少是旧版本)上,你必须使用readystatechange,并且在IE的一些版本上两者都可以工作。所以你必须保留一个标志,这样你就知道你是否触发了你的脚本,等等,and...well,如果你知道脚本创建了一个众所周知的全局符号,上面的事情就不那么复杂了(就像jQuery的情况一样)。
https://stackoverflow.com/questions/10959182
复制相似问题