Mathias Bynens Optimization of the 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');
だから私はこれを次のように使用されるコールバック関数に変えると考えました:
async('snapabug.appspot.com/snapabug.js', function() {
SnapABug.init('XXXXX-XXXXX-XXXXX-XXXXX-XXXXX');
});
これが私にとって難しいことだとは思っていませんでしたが、そのようになりました。
私の質問は、コードを過度に複雑にすることなくコールバックを追加する最も効率的な方法は何かということです。
jsfiddle を参照してください: http://jsfiddle.net/JamesKyle/HQDu6/