スクリプトからscriptタグを生成してロードされるまで待つ
IEでdefer属性が必要なのを知らなかったのでメモ。
Firefox 2と IE6(XP SP2) ,Opera 9.21で確認。
test.html
<html> <script src="A.js"></script> <body onload="A.test()">test</body> </html>
A.js
var A = { log:function(str){ var div = document.createElement("DIV"); div.innerHTML=str; document.body.appendChild(div); } ,test:function(){ A.log("A.test called"); B={bLoad:false}; var script = document.createElement("script"); script.defer = "defer"; script.src= "B.js"; document.body.appendChild(script); A.timerID = setInterval('A.checkScriptLoad("B.bLoad","B.test()")',1000); } ,checkScriptLoad:function(check_v,load_v){ var r = eval(check_v); if( r !== true ){ A.log("waiting script load.. "+r); }else{ clearInterval(A.timerID); eval(load_v); } } }
B.js
var B={ bLoad:true ,test:function(){ A.log("B.test called"); } }; A.log("B is loaded");