読み込み済みライブラリの判定
「prototype.js でも MochiKit でも動くよ」と言いたい時には、こんな感じで。
/** * 読み込み済みライブラリに応じて処理を実行 * * @param object param 適合オブジェクトと実行関数 * @return string|boolean マッチしたオブジェクト名。どれもマッチしなければfalse */ function doAdapt(param) { for (var node in param) { if (eval('typeof('+node+');') != 'undefined') { param[node](); return node; } } return false; }
これをどっかで定義しておいて、
doAdapt({ 'MochiKit' : function(){ addLoadEvent(onloadAction); }, 'Prototype': function(){ Event.observe(window, 'load', onloadAction); } });
こんな感じで呼び出す。MochiKitが読み込み済みならaddLoadEventが実行され、prototype.jsが読み込み済みならEvent.observeが実行されます。両方いける場合は上にある方が優先。
doAdaptの引数には、存在チェックするオブジェクト名と、そのオブジェクトが存在した時に実行する関数を対で指定します。サンプルではMochiKitとPrototypeを判定していますが、他のライブラリでもいいし、ぶっちゃけオブジェクトなら何でもあり。
function() { 〜 } で直接書いてもいいし、ライブラリ毎に実行する関数を用意しておいて、純粋なアダプタとして、
doAdapt({ 'MochiKit' : doMochiKit, 'Prototype': doPrototype });
てな感じで登録しておいても可。とりあえず、Win FirefoxとIE6で動作確認。ちょっとしたスクリプトのライブラリ依存を弱めるのに使えそう。