0

我插入 jquery 标签

    var newScript = document.createElement("script");
        newScript.id = "grazit_jq";
        newScript.type = "text/javascript"           
        newScript.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js";
        script.parentNode.appendChild(newScript);

之后我想检查 jquery 是否存在。

我这样做有几种方式。一种方式是这样的:

     var checkJquery=function(){
        if(typeof(jQuery) === 'undefined')
        {
           console.log('jQuery doesnt exist');
            window.setTimeout(arguments.callee,1000);
            return;
        }
        else{
        sprk_lib=new sprk();
           sprk_lib.load(jQuery);
        }
    };
  sprk.prototype.load=function($){


 console.log($);

}; 更新 现在我更新了代码。一旦 jQuery 对象可用,它将立即调用该函数。

在该函数中,我将执行我的 jquery 代码。你认为会有问题吗?这样做可以吗?

原来的

我在那儿等。问题是在控制台日志中,它返回 null 并且打印 jQuery 存在。如何在加载 jquery 之前停止脚本,然后继续执行脚本?

4

1 回答 1

2

考虑使用已建立的 JavaScript 脚本加载器,例如LABjsLazyLoad ,它们提供可靠的回调,在脚本完全加载之前不会触发。

查看5 个 JavaScript 脚本加载器的摘要

例如:

LazyLoad.js('https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js', function () {
  console.log('jQuery exists!');
  console.log('Document title: ' + $("title").text());
});

需要注意的一点——如果你想推迟所有进一步的脚本执行,直到 jQuery 加载之后,你可以将脚本的其余部分放在这个回调函数中。但是,这会破坏大量最佳实践(关注点分离、松散耦合等),因此最好的办法是将现有函数作为回调传递,该回调可以反过来调用其他函数等。例如:

function doSomething() {
  console.log('I am doing something!')
  doSomethingElse();
}

function doSomethingElse() {
  console.log('I am doing something else!');
}

LazyLoad.js('https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js', doSomething);

您可以进一步改进您的应用程序架构(例如通过引入PubSub),但这超出了这个问题的范围,所以我将把它留在那里。

于 2013-02-05T11:29:06.597 回答