Как обнаружить, если файлы JavaScript загружаются?

Используйте Str() Функция. Требуется три аргумента (число, общие символы числа для отображения, и количество десятичных разрядов для отображения

  Select Str(12345.6789, 12, 3)

дисплеи: '12345.679' (3 пробелов, 5 цифр 12345, десятичная точка и три десятичных цифры (679). - это округляется, если это должно усечь, (если целая часть не является слишком большой для общего размера, в этом случае звездочки отображены вместо этого.)

для в общей сложности 12 символов, с 3 направо от десятичной точки.

48
задан Sébastien Le Callonnec 21 December 2016 в 11:27
поделиться

5 ответов

У меня нет ссылки на него, но теги сценария обрабатываются по порядку, и поэтому, если вы поместите свой $ (документ) .ready (function1) в тег сценария после Теги сценария, которые определяют функцию1 и т. д., вам должно быть хорошо.

<script type='text/javascript' src='...'></script>
<script type='text/javascript' src='...'></script>
<script type='text/javascript'>
$(document).ready(function1);
</script>

Конечно, другой подход - убедиться, что вы используете только один тег сценария в целом, путем объединения файлов как части процесса сборки . (Если вы не загружаете другие из CDN где-нибудь.) Это также поможет улучшить воспринимаемую скорость вашей страницы.

РЕДАКТИРОВАТЬ: Только что понял, что на самом деле я не ответил на ваш вопрос: Я не знаю ' не думаю, что есть кроссбраузерное событие, которое ' s уволен, № Если вы достаточно много работаете, см. ниже. Вы можете проверить символы и использовать setTimeout для перепланирования:

<script type='text/javascript'>
function fireWhenReady() {
    if (typeof function1 != 'undefined') {
        function1();
    }
    else {
        setTimeout(fireWhenReady, 100);
    }
}
$(document).ready(fireWhenReady);
</script>

... но вам не нужно этого делать, если вы правильно указали порядок тегов скрипта.


Обновление: вы можете получать уведомления о загрузке для скрипта элементов, которые вы добавляете на страницу динамически, если хотите. Чтобы получить широкую поддержку браузера, вы должны сделать две разные вещи, но как комбинированный метод это работает:

function loadScript(path, callback) {

    var done = false;
    var scr = document.createElement('script');

    scr.onload = handleLoad;
    scr.onreadystatechange = handleReadyStateChange;
    scr.onerror = handleError;
    scr.src = path;
    document.body.appendChild(scr);

    function handleLoad() {
        if (!done) {
            done = true;
            callback(path, "ok");
        }
    }

    function handleReadyStateChange() {
        var state;

        if (!done) {
            state = scr.readyState;
            if (state === "complete") {
                handleLoad();
            }
        }
    }
    function handleError() {
        if (!done) {
            done = true;
            callback(path, "error");
        }
    }
}

По моему опыту, уведомление об ошибке ( onerror ) не является 100% кроссбраузерным. Также обратите внимание, что некоторые браузеры поддерживают оба механизма, поэтому переменная done позволяет избежать дублирования уведомлений.

Это необходимо делать, если вы правильно указали порядок тегов скрипта.


Обновление: вы можете получать уведомления о загрузке для элементов скрипта , которые вы добавляете на страницу динамически, если хотите. Чтобы получить широкую поддержку браузера, вы должны сделать две разные вещи, но как комбинированный метод это работает:

function loadScript(path, callback) {

    var done = false;
    var scr = document.createElement('script');

    scr.onload = handleLoad;
    scr.onreadystatechange = handleReadyStateChange;
    scr.onerror = handleError;
    scr.src = path;
    document.body.appendChild(scr);

    function handleLoad() {
        if (!done) {
            done = true;
            callback(path, "ok");
        }
    }

    function handleReadyStateChange() {
        var state;

        if (!done) {
            state = scr.readyState;
            if (state === "complete") {
                handleLoad();
            }
        }
    }
    function handleError() {
        if (!done) {
            done = true;
            callback(path, "error");
        }
    }
}

По моему опыту, уведомление об ошибке ( onerror ) не является 100% кроссбраузерным. Также обратите внимание, что некоторые браузеры поддерживают оба механизма, поэтому переменная done позволяет избежать дублирования уведомлений.

Это необходимо делать, если вы правильно указали порядок тегов скрипта.


Обновление: вы можете получать уведомления о загрузке для элементов скрипта , которые вы добавляете на страницу динамически, если хотите. Чтобы получить широкую поддержку браузеров, вы должны сделать две разные вещи, но как комбинированный метод это работает:

function loadScript(path, callback) {

    var done = false;
    var scr = document.createElement('script');

    scr.onload = handleLoad;
    scr.onreadystatechange = handleReadyStateChange;
    scr.onerror = handleError;
    scr.src = path;
    document.body.appendChild(scr);

    function handleLoad() {
        if (!done) {
            done = true;
            callback(path, "ok");
        }
    }

    function handleReadyStateChange() {
        var state;

        if (!done) {
            state = scr.readyState;
            if (state === "complete") {
                handleLoad();
            }
        }
    }
    function handleError() {
        if (!done) {
            done = true;
            callback(path, "error");
        }
    }
}

По моему опыту, уведомление об ошибке ( onerror ) не является на 100% кроссбраузерным. Также обратите внимание, что некоторые браузеры поддерживают оба механизма, поэтому переменная done позволяет избежать дублирования уведомлений.

уведомление об ошибке ( onerror ) не является 100% кроссбраузерным. Также обратите внимание, что некоторые браузеры поддерживают оба механизма, поэтому переменная done позволяет избежать дублирования уведомлений.

уведомление об ошибке ( onerror ) не является 100% кроссбраузерным. Также обратите внимание, что некоторые браузеры поддерживают оба механизма, поэтому переменная done позволяет избежать дублирования уведомлений.

69
ответ дан 26 November 2019 в 18:50
поделиться

Когда они говорят «Нижняя часть страницы», они буквально не имеют в виду нижнюю часть: они имеют в виду непосредственно перед закрывающим тегом . Поместите туда свои скрипты, и они загрузятся до события DOMReady; разместите их после этого, и DOM будет готов до их загрузки (потому что он будет завершен после анализа закрывающего тега ), что, как вы обнаружили, не будет работать.

Если вы ' Мне интересно, откуда я знаю, что они имеют в виду: я работал в Yahoo! и мы помещаем наши скрипты непосредственно перед тегом : -)

РЕДАКТИРОВАТЬ: также, см. ответ TJ Crowder и убедитесь, что у вас все в правильном порядке.

6
ответ дан 26 November 2019 в 18:50
поделиться

Я всегда вызываю из конца файлов JavaScript, чтобы зарегистрировать его загрузку, и раньше он отлично работал у меня во всех браузерах.

Пример: у меня есть index.htm , Js1.js и Js2.js. Я добавляю функцию IAmReady (Id) в заголовок index.htm и вызываю ее с параметрами 1 и 2 из конца файлов, Js1 и Js2 соответственно. Функция IAmReady будет иметь логику для запуска загрузочного кода после получения двух вызовов (с сохранением количества вызовов в статической / глобальной переменной) из двух файлов js.

2
ответ дан 26 November 2019 в 18:50
поделиться

Как TJ написал : порядок определен (по крайней мере, он последовательный, когда ваш браузер имеет примерно для выполнения любого JavaScript , даже если он может как-то параллельно загружать скрипты). Однако, если у вас возникли проблемы, возможно, вы используете сторонние библиотеки JavaScript, которые выдают ошибку 404 Not Found или тайм-аут? Если да, то прочтите Лучший способ использовать jQuery, размещенный в Google, но вернуться к моей размещенной библиотеке в Google не удастся.

0
ответ дан 26 November 2019 в 18:50
поделиться

Измените порядок загрузки ваших скриптов так, чтобы function1 была определена перед использованием ее в обратном вызове ready .

Кроме того, я всегда считал, что лучше определить обратный вызов ready как анонимный метод, а затем назвать его.

0
ответ дан 26 November 2019 в 18:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: