Как сказать, не удалось ли <сценарий> тегу загрузиться

умеренный токен действительно просто означает:

"соответствует, но только до точки"

, как вы делаете это:

вы помещаете токен , который вы не хотите сопоставлять как отрицательный lookahead (?!notAllowedToMatch) перед точкой . (соответствует любому одна вещь), то вы повторяете , что вся вещь со звездой *:

((?!notAllowedToMatch).)*

как это работает:

«смотреть и есть один» снова и снова, перемещая по одному символу слева направо через входную строку до тех пор, пока запрещенная последовательность (или конец строки ), в этот момент матч останавливается.

Более подробный ответ Wiktor - это хорошо, я просто подумал, что более простое объяснение было в порядке.

103
задан David 13 February 2009 в 06:02
поделиться

5 ответов

Нет никакого ошибочного события для тега script. Можно сказать, когда это успешно, и предположите, что это не загрузилось после тайм-аута:

<script type="text/javascript" onload="loaded=1" src="....js"></script>
31
ответ дан Diodeus - James MacFarlane 5 November 2019 в 11:23
поделиться

Чтобы проверить, не возвратил ли JavaScript в nonexistant.js ошибки, необходимо добавить переменную в http://fail.org/nonexistant.js как var isExecuted = true; и затем проверить, существует ли он, когда тег script загружается.

Однако, если Вы только хотите проверить, что эти nonexistant.js возвратился без 404 (значение его существует), можно попробовать isLoaded переменная...

var isExecuted = false;
var isLoaded = false;
script_tag.onload = script_tag.onreadystatechange = function() {
    if(!this.readyState ||
        this.readyState == "loaded" || this.readyState == "complete") {
        // script successfully loaded
        isLoaded = true;

        if(isExecuted) // no error
    }
}

Это покроет оба случая.

9
ответ дан Luca Matteis 5 November 2019 в 11:23
поделиться

Причина это не работает в Safari, состоит в том, потому что Вы используете синтаксис атрибута. Это будет хорошо работать хотя:

script_tag.addEventListener('error', function(){/*...*/}, true);

... кроме IE.

, Если Вы хотите проверить сценарий, выполняемый успешно, просто установите переменную с помощью того сценария и проверки на него устанавливаемый во внешнем коде.

1
ответ дан 5 November 2019 в 11:23
поделиться
[1129187775-

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

setTimeout(fireCustomOnerror, 4000);

Проблема с этим подходом состоит в том, что предположение основано на случайности. После истечения времени ожидания времени запрос до сих пор ожидается. Запрос на ожидающий скрипт может загружаться даже после того, как программист предполагает, что нагрузка не произойдет.

Если запрос может быть отменен, то программа может дождаться периода, затем отменить запрос.

0
ответ дан 24 November 2019 в 04:21
поделиться

Ну, я могу думать только о том, чтобы делать все, что вы хотите, - это довольно уродливо. Сначала выполните вызов AJAX, чтобы получить содержимое файла Javascript. Когда это завершится, вы можете проверить код состояния, чтобы решить, было ли это успешным или нет. Затем возьмите responseText из объекта xhr и оберните его в try / catch, динамически создайте тег сценария, а для IE вы можете установить свойство text тега сценария на текст JS, во всех других браузерах вы должны иметь возможность добавить текстовый узел с содержимым к тегу скрипта. Если есть какой-либо код, который ожидает, что тег сценария действительно будет содержать местоположение файла src, это не сработает, но в большинстве ситуаций должно подойти.

0
ответ дан 24 November 2019 в 04:21
поделиться
Другие вопросы по тегам:

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