检测并附加jQuery,如果没有加载纯Javascript和回退

Detect and append jQuery if not loaded with pure Javascript and a fallback

本文关键字:加载 Javascript 回退 如果没有 jQuery 检测      更新时间:2023-09-26

有没有人知道一种方法来检测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,但没有做任何事情,因为脚本在附加后立即启动。对此有什么提示吗?

我很感激任何答案。谢谢!

你很好,除了,正如你所说,你不能在附加新的script元素后立即调用startScript。相反,执行setTimeout循环:

// ...
document.body.appendChild(script);
maybeStart();

maybeStart看起来像这样的地方(不在if体内,函数声明在那里无效):

function maybeStart() {
    if (typeof jQuery === "undefined") {
        setTimeout(maybeStart, 100);
    }
    else {
        startScript();
    }
}

这将检查jQuery是否已加载,如果没有,则等待10秒并再次检查。当找到jQuery时,它会调用你的startScript

你可能想在那里设置一个时间限制(以防jQuery永远不会加载,所以你不会永远循环)。

或者,您可以在 script 元素上挂接"load"样式的事件,但它的机制因浏览器而异。在某些浏览器上,它只是load,比如说,一个img元素;在IE(至少是旧版本)上,您必须使用readystatechange,并且在某些版本的IE上两者都有效。所以你必须保留一个标志,这样你才能知道你是否已经触发了你的脚本,等等,然后......好吧,在你知道脚本创建一个众所周知的全局符号的情况下,上述情况就不那么复杂了(就像jQuery的情况一样)。