1

可能重复:

我以这种方式包含了 jQuery:

function loadScript(loc){
  var head = document.getElementsByTagName('head')[0];
  var file = document.createElement('script');
  file.src = loc;
  file.type = "text/javascript";
  head.appendChild(file)
}

loadScript("js/jquery.js")

现在应该以相同的方式加载下一个脚本。但是如果在最后一行之后加载,我就不能使用 jQuery,因为它可能没有完成加载。那么如何检查 jQuery 的加载是否完成?我可以做这样的事情吗?:

while (typeof jQuery == 'undefined')
  {
  wait...
  }
4

3 回答 3

8

动态加载脚本的普遍接受的方法是通过创建脚本元素然后附加到 DOM(就像您所做的那样),而且还分配一个回调函数来检测脚本何时加载。

function loadScript(url, callback){
    var script = document.createElement("script")
    script.type = "text/javascript";

    if (script.readyState){
        // handle IE
        script.onreadystatechange = function(){
            if (script.readyState == "loaded" || script.readyState == "complete"){
                script.onreadystatechange = null;
                callback();
            }
        };
    } else {
        // handle other browsers
        script.onload = function(){
            callback();
        };
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}

用法:

loadScript("https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js", function(){
    // jquery is loaded
});
于 2012-12-11T13:11:30.390 回答
0

JS 是单线程的应用程序使用:如果你创建一个无限循环,整个页面就会被卡住。

通常,在所有依赖库之前包含 JQuery,并且库仅在收到 $(document).ready 事件后才使用来自 JQuery 的 DOM API。

于 2012-12-11T13:09:27.953 回答
0

那里很少有装载机。您可以轻松使用它们。前任。-

  1. http://headjs.com/
  2. http://labjs.com/
  3. http://www.dustindiaz.com/scriptjs

检查这个http://labjs.com/documentation.php。这个的编码方法看起来和你的相似。你可以写 -

<script>
   $LAB
   .script("framework.js").wait()
   .script("plugin.framework.js")
   .script("myplugin.framework.js").wait()
   .script("init.js").wait();
</script>

看到等待()?它告诉“framework.js”必须先加载,然后再执行其他脚本。

于 2012-12-11T13:34:12.650 回答