2011-08-15 20 views
0

私はメインのJavaScriptファイルを持っています。他のファイルが依存しているcore.jsを呼び出します。依存するJavaScriptファイルが含まれているかどうかを確認

core.jsでは、依存ファイルに存在する必要があるオブジェクトを定義しています。

のCore.js:

(function(){ 
/* base package */ 
var core = window.core = function() { 
    // Throw an error, the core package cannot be instantiated. 
    throw new Error("A package cannot be instantiated"); 
}; 
})(); 

utils.js現在

/* utils package */ 
core.utils = function() { 
    // Throw an error, the core package cannot be instantiated. 
    throw("A package cannot be instantiated"); 
}; 

/** 
* Utility: StringUtils 
*/ 
core.utils.StringUtils = new Object(); 
core.utils.StringUtils.prototype = { 

    /** 
    * ltrim - Removes preceding whitespaces 
    */ 
    ltrim: function(value) { 
     var re = /\s*((\S+\s*)*)/; 
     return value.replace(re, "$1"); 

    }, 

    /** 
    * rtrim - Removes succeeding whitespaces 
    */ 
    rtrim: function(value) { 
     var re = /((\s*\S+)*)\s*/; 
     return value.replace(re, "$1"); 

    }, 

    /** 
    * trim - Removes preceding and succeeding whitespaces 
    */ 
    trim: function(value) { 
     return core.StringUtils.ltrim(core.StringUtils.rtrim(value)); 
    } 
}; 

、私は<script />タグにIDタグを追加する

<script id="core.js" src="core.js" type="text/javascript"></script> 

とチェックしていますそれは存在している新しいオブジェクトを定義する前にオブジェクトを削除してください。coreオブジェクト。

(function() { 
    if (typeof (core) == 'undefined') { 
     var script = document.getElementById("core.js"); 
     if (script == null) 
      throw ("core.js is missing."); 
     else 
      throw ("Unknown Exception. core is undefined."); 
    } 
})(); 

クロスブラウザとの互換性には注意が必要ですか?現在IE9とFF5で動作していますが、すべてのブラウザで動作することを確認したいと思います。

ファイルが含まれているかどうかを判断する方法がありますか?

+1

「安い」代替案は、「必須」ファイル内にセンチネル変数: 'var core_is_loaded = true'を設定し、そのvarの存在をチェックし、適切な値を持つことです。 –

+1

答えは実際にはありませんが、コア、core.utilsなどの関数をインスタンス化したくないのはなぜですか?単純なオブジェクトはできませんか? –

+0

@Chetanデザインパターンは、Frank Zammettiの「実用的なJavaScript、DOM Scripting and Ajax Projects」の第3章に大まかに基づいています。適切なエラー処理のために、スクリプトを使用しているすべての人が、「オブジェクトがこのアクションをサポートしていません」の代わりに、間違っていたことを知るためのエラーを投げたかったのです。 – Utilitron

答えて

1

<script>タグは、そのタグがcoreにアクセスできるようになると、すべてのJavascriptタグが同期しているため、正常に動作します。同じことをする別の方法が必要な場合は、Marc Bの提案を受け取り、core.jsにフラグを設定することができますフラグはcore.is_loaded = true;のように、コアオブジェクトの一部でもかまいません。他のファイルでif(core.is_loaded)をチェックするだけです。

+0

コアがエラーを投げたか、インスタンス化されなかった場合に、コアの内側にフラグを追加するのを止めたいと思います。コアが存在する場合、core.jsがロードされている必要があります。ただし、コアが存在しない場合、「core.jsがロードされていない」よりも1つ以上の理由があります。 – Utilitron