1

我的问题与类似。但我觉得那里的答案不完整,问题以不确定性结束......

我正在为我的用户开发一个 Javascript 应用程序以放在他们的网站上。我只希望他们必须将一个 javascript 包含在他们的网页顶部才能使用我的应用程序。

我的 javascript 需要 jQuery 才能运行。

所以目标是...

  1. 检查 jQuery 是否已经加载。
  2. 如果尚未加载,则加载 jQuery。
  3. 执行需要 jQuery 运行的 javascript。

我想在同一个脚本中完成以上三个。

这是我最初尝试的...

function loa_j(){
 if (typeof jQuery === "undefined") {
 var newscript = document.createElement('script');
 newscript.type = 'text/javascript';
 newscript.async = true;
 newscript.src = 'http://code.jquery.com/jquery-latest.min.js';
 (document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(newscript);
 }
}

loa_j();
$(document).ready(function(){
//...Code That Never Fired
}

这不起作用,因为javascript 不等待 jQuery 加载。它确实加载了 jQuery,只是速度不够快。

这是我的另一个解决方案,这个解决方案有效,但我挠头想知道这是否真的是最好的方法......

function loa_j(){
if (typeof jQuery === "undefined") {
(function(a,b){function G(a){var b=F[a]={.... //Entire jQuery copy and pasted in :D
}
}

因此,通过将整个 jQuery 复制并粘贴到该函数中,代码确实可以工作。

这真的是最好的方法吗?

4

4 回答 4

1

您可以将 onload 事件添加到动态加载的脚本中,如下所示:

function loa_j(){
 if (typeof jQuery === "undefined") {
     var newscript = document.createElement('script');
     newscript.type = 'text/javascript';
     newscript.async = true;
     newscript.src = 'http://code.jquery.com/jquery-latest.min.js';
     newscript.onload = jqReady;  //<-- executed only after jquery is loaded
     (document.getElementsByTagName('head')[0]||document.getElementsByTagName('body'[0]).appendChild(newscript);
  }
}

function jqReady(){
    // your jquery code here 
}

loa_j();
于 2012-09-25T07:52:11.237 回答
0

你可以试试这个,它基本上是等待jquery加载,然后执行函数。如果可以的话,可能静态加载 Jquery 也是一个好主意,因为您似乎确实依赖于 $(document).ready 函数。但如果那不可能,你可以试试这个,或者任何其他的加载器,比如 yepnope.js 或我最喜欢的 requirejs。

http://jsfiddle.net/ytZRw/

于 2012-09-25T06:56:01.590 回答
0

像这样编辑

$(document).ready(function(){
loa_j();
//...Code That Never Fired
}
于 2012-09-25T06:13:16.627 回答
0

在这种情况下,您必须使用计时器来检查库是否存在,然后执行您的代码。看到这个小提琴:

http://jsfiddle.net/pFaJc/

var callback = function(){
    $(document).ready(function(){
         console.log('jquery');
    });        
}

if( typeof jQuery === 'undefined' ){
    var scr = document.createElement('script');
    scr.src = 'http://code.jquery.com/jquery-latest.min.js';
    document.getElementsByTagName('head')[0].appendChild(scr);

    var timer = setInterval(function(){
        if( typeof jQuery !== 'undefined' ){
            clearInterval(timer);
            callback();
        }        
    },100);
}​
于 2012-09-25T06:18:57.660 回答