それが可能だ。
私はおそらく次のようにアプローチします:
まず、スクリプトをロードする関数を作成します。
function loadScript(src) {
var s = document.createElement('script'), x;
s.type = 'text/javascript';
s.async = true;
s.src = src;
x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(x, s);
}
スクリプトをロードするにはこれで十分ですが、ロードが完了したのか、まったくロードされなかったのかをどのようにして知ることができますか?
2つのコールバックパラメーター(1つは成功用、もう1つは失敗用)とタイムアウトパラメーターを追加しましょう。また、要素にイベントリスナーをアタッチして、scriptロード時にコールバックを起動する必要があります。
function loadScript(src, onSuccess, onFail, timeout) {
var s = document.createElement('script'), x, loaded;
s.type = 'text/javascript';
s.async = true;
s.src = src;
s.onload = s.onreadystatechange = function() {
if (''+s.readyState).match(/^(|complete|loaded|uninitialized)$/) {
loaded = true;
onSuccess && onSuccess();
s.onload = s.onreadystatechange = null;
}
}
if (onFail) {
setTimeout(function(){loaded || onFail();}, timeout || 5000);
}
x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(x, s);
}
完全な開示:
- これは完全にテストされていません。
- コードの最初のブロックはGoogleAnalyticsから削除され、醜いコードは少し少なくなっています。
- コードの2番目のブロックは、Slaceの回答を見た後、少し醜いがより簡潔なコードでyepnopeから削除されます。