Включите библиотеку JavaScript для расчета - PullRequest
4 голосов
/ 17 марта 2012

Я хочу сделать что-то очень простое в JavaScript. У меня есть файл main.js, который должен вызвать метод расчета в math.js.

Если я включу в index.html эти два файла с тегом script, сначала math.js, а затем main.js, я гарантирую, что math.js будет загружен до того, как я смогу использовать его в main.js?

Если нет, нужно ли мне совершать взломанные файлы, как я прочитал здесь Как включить файл JavaScript в другой файл JavaScript? или даже хуже, потому что я даже не вижу в этой ссылке, как зависимость фактически учитывается.

Обновление: почему мне не нравится то, что делает Dashcode Как я могу добавить свою библиотеку для загрузки частей Dashcode то есть просто использовать document.write ('...')? Действительно ли document.write достаточно надежен при очень медленном соединении, если библиотека была больше, чем main.js?

Ответы [ 4 ]

4 голосов
/ 17 марта 2012

Установите переменную в math.js и докажите в main.js, если эта переменная существует.

var mathLoaded = true;

в main.js:

function loaded() {
    return ((typeof mathLoaded) !== 'undefined');
}

Редактировать:

Теперь вы можете запустить функцию ожидания, пока она не будет загружена:

function wait() {
    if(loaded()) {
        //doSomething();
    } else {
        window.setTimeout(function() { wait(); }, 0);
    }
}

window.setTimeout(function() { wait(); }, 0);
1 голос
/ 17 марта 2012

Почему бы не использовать window.onload?

window.onload = function () {
    //your code here.
}

или по-настоящему модно с кросс-браузерной addEvent функцией?

var libJS = {
    addEvent: function (obj, type, fn) {
        if (obj.addEventListener) {
            obj.addEventListener(type, fn, false);
            return true;
        } else if (obj.attachEvent) {
            obj['e' + type + fn] = fn;
            obj[type + fn] = function () {
                obj['e' + type + fn](window.event);
            }
            var r = obj.attachEvent('on' + type, obj[type + fn]);
            return r;
        } else {
            obj['on' + type] = fn;
            return true;
        }
    }
}

, который правильно привязывает функции к событиям ...

libJS.addEvent(window, 'load', someMainJsFunction); //add to window.onload
1 голос
/ 17 марта 2012

Нет, вы не.Файлы могут быть загружены в любом порядке.Как правило, вы хотите позвонить по исходному коду из события load.Это даже срабатывает после загрузки всех файлов, необходимых для страницы.

1 голос
/ 17 марта 2012

вы можете взглянуть на RequireJS , чтобы убедиться, что зависимости загружены

также, JS загружается и анализируется сверху вниз. в зависимости от того, что произойдет первым, источник извлекается первым и анализируется первым (но это не гарантирует порядок, поскольку серверы для некоторых файлов могут работать медленно). Вот почему рекомендуется, чтобы, если вы используете библиотеки и наборы инструментов (например, jQuery и другие), они загружались раньше всего.

...