首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果未加载纯Javascript,则检测并附加jQuery并进行回退

如果未加载纯Javascript,则检测并附加jQuery并进行回退
EN

Stack Overflow用户
提问于 2012-06-09 15:18:45
回答 1查看 879关注 0票数 3

是否有人知道如何检测jQuery库是否已加载,如果未加载,则在将其加载到DOM后追加该库并启动脚本作为备用解决方案?

下面是我的脚本:

代码语言:javascript
运行
复制
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,但没有做任何事情,因为脚本在附加之后会立即启动。对此有什么提示吗?

感谢您的回复。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-09 15:21:52

就像您说的,除了不能在追加新的script元素后立即调用startScript之外,一切都很好。相反,执行一个setTimeout循环:

代码语言:javascript
运行
复制
// ...
document.body.appendChild(script);
maybeStart();

其中maybeStart看起来像这样(不在if主体中,函数声明在那里是无效的):

代码语言:javascript
运行
复制
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的情况一样)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10959182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档