Load jQuery with Javascript and use jQuery

I am appending the jQuery library to the dom using:

 var script = document.createElement('script');
 script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
 script.type = 'text/javascript';
 document.getElementsByTagName('head')[0].appendChild(script);

However when I run:

jQuery(document).ready(function(){...

The console reports the error:

Uncaught ReferenceError: jQuery is not defined

How do I load jQuery dynamically as well as use it once it is in the dom?


There's a working JSFiddle with a small example here, that demonstrates exactly what you are looking for (unless I've misunderstood your request): http://jsfiddle.net/9N7Z2/188/

There are a few issues with that method of loading javascript dynamically. When it comes to the very basal frameworks, like jQuery, you actually probably want to load them statically, because otherwise, you would have to write a whole JavaScript loading framework...

You could use some of the existing JavaScript loaders, or write your own by watching for window.jQuery to get defined.

// Anonymous "self-invoking" function
(function() {
    // Load the script
    var script = document.createElement("SCRIPT");
    script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
    script.type = 'text/javascript';
    script.onload = function() {
        var $ = window.jQuery;
        // Use $ here...
    };
    document.getElementsByTagName("head")[0].appendChild(script);
})();

Just remember that if you need to support really old browsers, like IE8, load event handlers do not execute. In that case, you would need to poll for the existance of window.jQuery using repeated window.setTimeout . There is a working JSFiddle with that method here: http://jsfiddle.net/9N7Z2/3/

There are lots of people who have already done what you need to do. Check out some of the existing JavaScript Loader frameworks, like:

  • https://developers.google.com/loader/
  • http://yepnopejs.com/ (deprecated)
  • http://requirejs.org/

  • There is an other way to load jQuery dynamically (source). You could also use

    document.write('<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>');
    

    It's considered bad practice to use document.write , but for sake of completion it's good to mention it.

    See Why is document.write considered a "bad practice"? for the reasons. The pro is that document.write does block your page from loading other assests, so there is no need to create a callback function.


    Encosia's website recommends:

    <script type="text/javascript" 
            src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
      // You may specify partial version numbers, such as "1" or "1.3",
      //  with the same result. Doing so will automatically load the 
      //  latest version matching that partial revision pattern 
      //  (e.g. 1.3 would load 1.3.2 today and 1 would load 1.7.2).
      google.load("jquery", "1.7.2");
    
      google.setOnLoadCallback(function() {
        // Place init code here instead of $(document).ready()
      });
    </script>
    

    But even he admits that it just doesn't compare to doing the following when it comes to optimal performance:

        <script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js" type="text/javascript"></script>
        <script type="text/javascript"> window.jQuery || document.write('<script src="js/libs/jquery-1.7.2.min.js">x3C/script>')</script>
        <script type="text/javascript" src="scripts.js"></scripts>
    </body>
    </html>
    
    链接地址: http://www.djcxy.com/p/42464.html

    上一篇: 你如何动态加载来自不同域的JavaScript文件?

    下一篇: 用Javascript加载jQuery并使用jQuery