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

これの、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/13 19:59:41
  • 終了:2009/10/20 20:00:03

回答(2件)

id:y-kawaz No.1

y-kawaz回答回数1421ベストアンサー獲得回数2262009/10/13 20:42:25

ポイント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

ginpei回答回数40ベストアンサー獲得回数02009/10/14 02:28:51

ポイント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、ブラウザの種類、バージョン、どのようにしてテストをしているのか、
    現在動かないサンプルを提示していただけると回答しやすいかと思います。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません