Асинхронный обратный вызов загрузки скрипта

http://jsfiddle.net/JamesKyle/HQDu6/I»

мы создали короткую функцию на основеМатиас Биненс Оптимизация асинхронного скрипта Google Analytics это выглядит следующим образом:

function async(src) {
  var d = document, t = 'script',
      o = d.createElement(t),
      s = d.getElementsByTagName(t)[0];
  o.src = '//' + src;
  s.parentNode.insertBefore(o, s);
}

Это прекрасно работает, и ямы уже начали использовать его для нескольких разных скриптов

// Crazy Egg
async('dnn506yrbagrg.cloudfront.net/pages/scripts/XXXXX/XXXXX.js?' + Math.floor(new Date().getTime() / 3600000));

// User Voice
var uvOptions = {};
async('widget.uservoice.com/XXXXX.js');

// Google Analytics
var _gaq = [['_setAccount', 'UA-XXXXX-XX'], ['_setDomainName', 'coachup.com'], ['_trackPageview']];
async('google-analytics.com/ga.js');

// Stripe
async('js.stripe.com/v1');​

Проблема возникает, когда я сталкиваюсь со скриптом, который должен быть вызван после негозагружено:

// Snap Engage
async('snapabug.appspot.com/snapabug.js');
SnapABug.init('XXXXX-XXXXX-XXXXX-XXXXX-XXXXX');

Итак, я понял, что яd превратить это в функцию обратного вызова, которая будет использоваться следующим образом:

async('snapabug.appspot.com/snapabug.js', function() {
    SnapABug.init('XXXXX-XXXXX-XXXXX-XXXXX-XXXXX');
});

Я не ожидал, что это будет трудно для меня, но так и вышло.

Мой вопрос заключается в том, что является наиболее эффективным способом добавления обратного вызова без чрезмерного усложнения кода.

Смотрите jsfiddle:http://jsfiddle.net/JamesKyle/HQDu6/

Ответы на вопрос(2)

Ваш ответ на вопрос