等待动态脚本加载的JS类加载

时间:2011-03-23 22:36:44

标签: javascript

我有一个依赖于jQuery的JS脚本。

我想检查jQuery,如果没有加载/可用,请自行添加,等待加载,然后定义我的脚本类。

我目前使用的代码:

// load jQuery if not loaded yet
if (typeof (jQuery) == 'undefined') {
  var fileref = document.createElement('script');
  fileref.setAttribute("type", "text/javascript");
  fileref.setAttribute("src", 'http://code.jquery.com/jquery-1.4.4.min.js');
  document.getElementsByTagName('body')[0].appendChild(fileref);

  (ready = function() {
    if ( typeof (jQuery) == 'undefined' || !jQuery) {
      return setTimeout( ready, 1 );
    } else {
      // jQuery loaded and ready
      jQuery.noConflict();
    }
  })();
}

// … class definition follows
var MView = function() …

现在,使用FireFox 4(我认为之前它确实有效,或执行速度太慢),即使我还想等待jQuery,它仍会继续执行脚本。递归的setTimeout是非阻塞的。

我该如何解决这个问题?使setTimeout阻塞?使用另一种方法?有没有更好的办法?一种方式?

该类应该是全局范围,因此可以在包含此脚本文件的页面上使用。

1 个答案:

答案 0 :(得分:6)

我会推荐两件事。

  1. 使用'if(!jQuery)'因为undefined被认为是假的
  2. 使用脚本标记的onload事件
  3. 
    if (!window.jQuery) {
        var fileref = document.createElement('script');
        fileref.setAttribute("type", "text/javascript");
        fileref.setAttribute("src", 'http://code.jquery.com/jquery-1.4.4.min.js');
        fileref.onload = function() {
            // Callback code here
        };
        document.getElementsByTagName('body')[0].appendChild(fileref);
    }