すいません。以下のソースなんですが

これの、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);
}

教えていただけると、非常に助かります。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/10/20 20:00:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:y-kawaz No.1

回答回数1422ベストアンサー獲得回数226

ポイント35pt

全くテストしないで空で書いているので動作しないかもしれませんが、

複数ファイルを読み込めるようにしてみました。

最初に変数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);
  }
}
id:hopefully

ありがとうございます。ですが

エラー: uncaught exception: [Exception... "Out of Memory" nsresult: "0x8007000e (NS_ERROR_OUT_OF_MEMORY)"

というのがあがってきますね・・

なんだろう・・

2009/10/14 10:30:25
id:ginpei No.2

回答回数40ベストアンサー獲得回数0

ポイント35pt

単純に同じ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);

========

id:hopefully

ありがとうございます。ですが

エラー: uncaught exception: [Exception... "Out of Memory" nsresult: "0x8007000e (NS_ERROR_OUT_OF_MEMORY)"

というのがあがってきますね・・

なんだろう・・

2009/10/14 10:30:29
  • id:Cherenkov
    OS、ブラウザの種類、バージョン、どのようにしてテストをしているのか、
    現在動かないサンプルを提示していただけると回答しやすいかと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません