【问题标题】:Waiting on JS class load from dynamic script loading等待动态脚本加载的 JS 类加载
【发布时间】:2011-07-21 17:11:56
【问题描述】:

我有一个依赖于 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 阻塞?使用其他方法?有没有更好的办法?有办法吗?

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

【问题讨论】:

标签: javascript


【解决方案1】:

我会推荐两件事。

  1. 使用 'if (!jQuery)' 因为 undefined 被认为是错误的
  2. 使用脚本标签的onload事件

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);
}

【讨论】:

  • 即使我在那里将我的类定义为window.class,我也无法在页面上使用它,因为它不会等待加载。
  • 尝试将您的类定义放入一个函数中,并在 jQuery 加载后调用该函数。
  • 我需要的是用 setTimeout 和 onload 事件玩愚蠢的游戏。谢谢!
猜你喜欢
  • 2023-04-09
  • 2019-01-23
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
相关资源
最近更新 更多