如何知道 JQuery 是否已完成加载

IT技术 javascript jquery
2021-02-26 15:08:01

在某些情况下,我需要使用这样的一段 javascript 加载 jQuery:

 <script type="text/javascript">
    if (typeof jQuery == 'undefined') 
    {
    var script = document.createElement('script');
    script.type = "text/javascript";
    script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";
    document.getElementsByTagName('head')[0].appendChild(script);
    }
 </script>

但是我怎么知道 JQuery 已经完成加载以便我可以使用它。

4个回答

您将不得不编写代码来检测何时加载了动态加载的脚本,不幸的是,它在某些旧浏览器中的工作方式略有不同,因此它并不像它想象的那么简单。这是一篇关于如何做到这一点的很好的参考文章:http : //www.ejeliot.com/blog/109

这是那篇文章中的一些代码:

function loadScript(sScriptSrc, oCallback) {

    var oHead = document.getElementsByTagName('head')[0];
    var oScript = document.createElement('script');

    // make sure callback isn't run more than once
    function runCallback() {
        if (oCallback) {
            oCallback();
            oScript.onload = oScript.onreadystatechange = null;
            oCallback = null;
        }
    }

    oScript.type = 'text/javascript';
    // most browsers
    oScript.onload = runCallback;
    // IE 6 & 7
    oScript.onreadystatechange = function() {
        if (this.readyState === 'complete') {
            runCallback();
        }
    }
    oScript.src = sScriptSrc;
    oHead.appendChild(oScript);
}

或者,您可以使用为您完成这项工作的微型库之一。您可以在此处查看其中一些列表:http : //microjs.com/#loader虽然我不确定您是否想使用另一个库来帮助加载您的主库。

谢谢。我正在寻找您上面提到的解决方案(第一个链接)。
2021-04-29 15:08:01
@TimDumol - 好主意 - 我已经采纳了这个建议。
2021-04-29 15:08:01
他也可以在这里尝试使用现成的延迟加载器之一:microjs.com/#loader
2021-05-05 15:08:01

尝试onload事件:

 //.....
 script.onload = function(){
     alert('jQuery is loaded succesfully').
 };
 script.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";
这适用于某些浏览器,但不适用于旧版本的 IE。
2021-04-30 15:08:01

感谢 jfriend 的回答。回调很性感。

第二次破解它。

function loadJQ(callback) {
  if(!window.jQuery) {
    // Create jQuery script element.
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'path/to/jquery.js';
    document.body.appendChild(script);

    script.onload = function(){ callback(jQuery); };
    // IE 6 & 7 ala jfriend00
    script.onreadystatechange = function() {
      if (this.readyState == 'complete') callback(jQuery);
    }
  } else {
    callback(jQuery);
  }
}

调用

loadJQ(function($){
  alert($ === jQuery); // true. jquery is loaded.
});
呸.. 很好的电话。更新我的片段
2021-05-08 15:08:01
为什么要在循环中重新加载 jQuery?您的代码基本上就是这样做的。如果未加载 jQuery,请加载 jQuery。如果 onload 触发而 jQuery 未加载,请再次加载 jQuery,一遍又一遍地重复。
2021-05-08 15:08:01
我从我的书签片段之一中抓取了这个。只有当 jQuery 已经在页面上时才有用。我可能应该修补它,以免尝试多次创建脚本。
2021-05-12 15:08:01
script.onload 在某些旧版本的 IE 中不起作用。
2021-05-16 15:08:01
哈哈,当然是我来晚了,工程师也打我吧。script.onload 是关键
2021-05-19 15:08:01

你可以把代码放进去

$(document).ready(function() {
   // Handler for .ready() called.
});

这里是文档:http : //api.jquery.com/ready/

编辑:猜猜我的问题错了。所以我无法回答如何查看它的加载,但可以提供另一种加载 lib 的方法。

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>window.jQuery || document.write("\x3Cscript src=\"path/to/js/jquery-1.7.1.min.js') }}\">\x3C/script>")</script>

在这里,如果 google api 不可用,则会加载本地版本的 jQuery。比上面的剪切应该足够安全,知道 jQuery 已加载。

document.ready()如果尚未加载 jQuery,则无法使用这对 OP 关于动态加载的 jQuery 的问题没有帮助。
2021-05-13 15:08:01