【问题标题】:Adding events to detect when all dynamically added scripts are loaded添加事件以检测何时加载所有动态添加的脚本
【发布时间】:2013-11-24 08:41:59
【问题描述】:

代码中没有抛出任何错误,所以我只能假设事件没有被触发或者它们没有被正确添加。谁能确定这里的问题是什么?

代码如下。 Fiddle here.

$('#fake-body').append('init<br />');
var scriptTag,
scriptsLoaded = 0,
scripts = ['//netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js', '//codeorigin.jquery.com/ui/1.9.2/jquery-ui.min.js'],
scriptLoadedCallback = function(val) {
  scriptsLoaded++;
  $('#fake-body').append('callback called for '+val+' | scriptsloaded = '+scriptsloaded+' & length = '+scripts.length+'<br />');
  if(scriptsLoaded === scripts.length) {
    $('#fake-body').append('all loaded');
  }
};

$.each(scripts, function(index, value) {
  $('#fake-body').append('preparing '+value+'<br />');
  scriptTag = document.createElement('script');
  scriptTag.type = 'text/javascript';
  scriptTag.src = value;
  if(typeof scriptTag.addEventListener !== 'undefined') {
    $('#fake-body').append('add event for good browsers<br />');
    scriptTag.addEventListener('load', (function() {
      scriptLoadedCallback(value);
    }), false);
  } else {
    $('#fake-body').append('add event for the other one<br />');
    scriptTag.attachEvent('onreadystatechange', function() {
      if(scriptTag.readyState === 'loaded') {
        scriptLoadedCallback(value);
      }
    });
  }
  $('#fake-body').append('appending script<br />');
  $('#fake-body').append(scriptTag);
});

$('#fake-body').append('complete');

【问题讨论】:

    标签: javascript jquery addeventlistener jquery-events


    【解决方案1】:

    使用纯Javascript来加载javascript文件而不是jquery(因为jquery不会在你当前的代码中触发加载回调),所以替换:

    $('#fake-body').append(scriptTag);
    

    与:

    $('#fake-body')[0].appendChild(scriptTag);
    

    或者如果您坚持使用jquery,您必须尊重以下语句顺序(或使用getScript):

    $body.append(scriptTag);
    scriptTag.attachEvent
    scriptTag.src = scriptUrl;
    

    jsfiddle

    在回调中引用 scriptsloaded 而不是 scriptsLoaded 会出现另一个错误。

    【讨论】:

    • 不敢相信我没有看到这个!?但我想这就是我在凌晨 3 点编写代码所得到的……:P 谢谢!
    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    相关资源
    最近更新 更多