Определение, был ли включен зависимый файл JavaScript - PullRequest
0 голосов
/ 15 августа 2011

У меня есть основной файл JavaScript, мы назовем core.js, от которого зависит другой файл.

В 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 Ответ

1 голос
/ 15 августа 2011

Это будет работать нормально, поскольку теги <script> являются синхронными для любого Javascript после того, как этот тег будет иметь доступ к core. Если вам нужен другой способ сделать то же самое, вы можете воспользоваться предложением Марка Б. и установить флаг в core.js. Флаг также может быть частью основного объекта, например core.is_loaded = true;. Затем вы просто проверяете if(core.is_loaded) в других ваших файлах.

...