これの、src部分を複数ファイルを渡して
処理するには、どうしたらいいでしょうか?
JavaScriptLoader(
'http://aaaa.com/test.js', function(data) {alert(data)}
);
やりたいことはこんな感じです・・
JavaScriptLoader({
0: 'http://aaaa.com/test.js,
1: 'http://bbbb.com/test2.js,
2: 'http://aaaa.com/test3.js
}, function(data) {
// 読み込み完了
alert(data)
});
function JavaScriptLoader(src, callback){
var sc = document.createElement('script');
sc.type = 'text/javascript';
if (window.ActiveXObject) {
sc.onreadystatechange = function(){
if (sc.readyState == 'complete') callback(sc.readyState);
if (sc.readyState == 'loaded') callback(sc.readyState);
};
} else {
sc.onload = function(){
callback('onload');
};
}
sc.src = src;
document.documentElement.appendChild(sc);
//document.body.appendChild(sc);
}
教えていただけると、非常に助かります。
よろしくお願いします。
全くテストしないで空で書いているので動作しないかもしれませんが、
複数ファイルを読み込めるようにしてみました。
最初に変数countにsrcListの数を保存しておき、読み込み完了する度にカウントダウンして全て読み込みが完了した時点で本来のcallbackを実行するダミーのコールバック関数で包んでみました。
JavaScriptLoader2( [ 'http://aaaa.com/test.js', 'http://aaaa.com/test2.js', 'http://aaaa.com/test3.js' ], function(data) { // 読み込み完了 alert(data) } ); function JavaScriptLoader2(srcList, callback){ var count = srcList.length; var callback2 = function(t) { count = count -1; if(count < 1) { callback(t); } }; for(var i=0; i < srcList.length; i++) { var src = srcList[i]; var sc = document.createElement('script'); sc.type = 'text/javascript'; if (window.ActiveXObject) { sc.onreadystatechange = function(){ if (sc.readyState == 'complete') callback2(sc.readyState); if (sc.readyState == 'loaded') callback2(sc.readyState); }; } else { sc.onload = function(){ callback2('onload'); }; } sc.src = src; document.documentElement.appendChild(sc); //document.body.appendChild(sc); } }
単純に同じcallbackを複数のファイルに対して行いたい場合は、
forで順番に実行するだけですね。
========
// ファイル名の配列
var files = [
'1.js',
'2.js',
];
// 読み込み完了時に呼ばれる関数
var callback = function(data) {
alert(data);
};
// 順次読み込み
for (var i=0; i<files.length; i++) {</p>
JavaScriptLoader(files[i], callback);
}
========
ファイルが全部読み込み終わっってからcallbackを実行する、というのでしたら、
読み込まれた数を数えていってファイル数に達した時点でcallbackを実行すればよさそうです。
処理を関数にまとめてみました。
========
// この関数を使います
function JavaScriptListLoader(files, callback) {
var loaded = 0;
var length = files.length;
var count = function() {
loaded++;
if (loaded >= length) {
callback.apply(this, arguments);
}
};
for (var i=0; i<files.length; i++) {</p>
JavaScriptLoader(files[i], count);
}
}
// ファイル名の配列
var files = [
'1.js',
'2.js',
];
// 読み込み完了時に呼ばれる関数
var callback = function(data) {
alert(data);
};
// 複数ファイルを読み込み
JavaScriptListLoader(files, callback);
========
ありがとうございます。ですが
エラー: uncaught exception: [Exception... "Out of Memory" nsresult: "0x8007000e (NS_ERROR_OUT_OF_MEMORY)"
というのがあがってきますね・・
なんだろう・・
ありがとうございます。ですが
エラー: uncaught exception: [Exception... "Out of Memory" nsresult: "0x8007000e (NS_ERROR_OUT_OF_MEMORY)"
というのがあがってきますね・・
なんだろう・・