3

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

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

4

1 回答 1

4

你很好,除了,正如你所说,你不能startScript在附加新script元素后立即调用。相反,做一个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一个img元素一样;在 IE(至少是旧版本)上,您必须使用readystatechange,并且在某些版本的 IE 上两者都可以使用。所以你必须保留一个标志,这样你就知道你是否已经启动了你的脚本等,而且......好吧,如果你知道脚本创建了一个众所周知的全局符号(如jQuery就是这种情况)。

于 2012-06-09T07:21:51.810 回答