2011-08-15 21 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)); 
    } 
}; 

目前,我加入了一個ID標籤的標籤<script />

<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',並檢查該變量的存在並獲得適當的值。 –

+1

不是一個真正的答案,但爲什麼使核心,core.utils等功能,如果你不希望他們被實例化?簡單的對象不會做? –

+0

@Chetan設計模式鬆散地基於Frank Zammetti的'Practical JavaScript,DOM Scripting and Ajax Projects'的第3章。爲了正確的錯誤處理,我想拋出一個錯誤,允許任何使用腳本的人知道他們做錯了什麼,而不是通用的「對象不支持這個動作」。 – Utilitron

回答

1

這將工作正常,因爲<script>標籤是同步的任何Javascript後,該標籤將有權訪問core。如果你想要另一種做同樣事情的方法,你可以採用Marc B的建議,並在core.js中設置一個標誌。該標誌也可以是核心對象的一部分,如core.is_loaded = true;然後,您只需在其他文件中檢查if(core.is_loaded)

+0

我想遠離在覈心拋出錯誤或未實例化的情況下在內核中添加標誌。如果核心存在,那麼core.js必須已經加載。但是,如果核心不存在,則有超過1個原因比'core.js未加載' – Utilitron

相關問題