includeAndRun pluginを少し弄ってみた
jQueryに標準で入っているjQuery.getScript関数で良い。
pluginのコード
(function($){ $.extend($,{ includeAndRun:function(scriptUrl,callback){ var s = $('<script/>') .attr({ src:scriptUrl, language:'javascript', type:'text/javascript' }); if($.browser.msie){ s.bind('readystatechange',function(e){ if (this.readyState === 'loaded') { setTimeout(callback,50); } }); }else{ s.bind('load',function(e){ $(this).remove(); callback(); }); } $('head').get(0).appendChild(s.get(0)); } }); })(jQuery);
せつめー
どうもreadystatechangeイベントはIEとOperaで拾えるようだ。
Operaではloadイベントが拾えるのでOperaの場合もとりあえず無視。
IEの場合限定でイベントを登録することにしたけど、
元ネタに出てきた「this.readyState === 'complete'」という状態にはならないようで、
"loaded"までしか行かない。
おまけにその時点でもscriptの内容が実行されていない
or 実行されていることが保障されていないようなので、
とりあえずsetTimeoutしてみたけど、
指定した時間よりも読み込んだJavaScriptを実行するのにかかる時間が長ければアウト。
もすこし勉強してみないといけないなあ。