人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

すいません。以下のソースなんですが
これの、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);
}

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


●質問者: hopefully
●カテゴリ:就職・転職 ウェブ制作
✍キーワード:BODY JavaScript SC SCRIPT SRC
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● y-kawaz
●35ポイント

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

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

最初に変数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);
 }
}
◎質問者からの返答

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

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

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

なんだろう・・


2 ● ginpei
●35ポイント

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

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

なんだろう・・

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ