« グリモン勉強会 | メイン | Google Chart API の Google-o-meter »

外部JavaScriptファイルをロードして、そこに書かれている関数を実行する。

Greasemonkey勉強会で紹介したJavaScriptのTips。

hoge.jsにhogeFuncが定義されていて、hoge.jsを読み込んですぐにhogeFuncを実行したいとき。

↓こんな風に書いちゃうと、エラーになってしまいます。

var s = document.createElement('script');
s.type='text/javascript';
s.charset = 'utf-8';
s.src = 'hoge.js';
document.getElementsByTagName('head')[0].appendChild(s);
hogeFunc();//この時点ではまだhoge.jsがロードされていない可能性が高い

hoge.jsのscriptタグをappendした後、実際にhoge.jsがダウンロードされ、JavaScriptが解釈されるまではhogeFuncは実行できません。

ということで、↓こんな風にしてsetIntervalで定期的に処理を実行してやればOK。

var s = document.createElement('script');
s.type='text/javascript';
s.charset = 'utf-8';
s.src = 'hoge.js';
document.getElementsByTagName('head')[0].appendChild(s);
var timerId = setInterval(timerFunc,100);//100msecごとにtimerFunc()を実行
function timerFunc(){
  if(window.hogeFunc){
    clearInterval(timerId);//100msecごとに実行している処理を停止
    hogeFunc();//ロードされているのでエラーが起こらない
  }else{
    //hogeFuncが定義されていない場合はここを通る。=何もしない
  }
}