Здравствуйте.
Есть два js файла такого типа <script defer="" src="/static/CACHE/js/070e65d4886b.js"></script>, подключение которых идёт после </footer> и перед </body>.
Внутри этих файлов куча всего, включая bootstrap.js и jquery.js.
В теле сайта, на разных страницах, иногда встречаются инлайн обработчики, которые не удаётся, по ряду причин, ужать и засунуть в один из общих файлов.
Каким образом можно дождаться загрузки больших файлов, находящихся ниже в DOM, учитывая, что я не могу наверняка знать их название заранее?
ДОПОЛНЕНИЕ
Изначально, было так:
<head>
...
<script type="text/javascript" src="js/script1.js"></script>
<script type="text/javascript" src="js/script2.js"></script>
<script type="text/javascript" src="js/script3.js"></script>
</head>
затем, находящиеся внутри <body></body> инлайн скрипты окружались привычным многим $(document).ready(function(){...})
и на деве это не вызывало проблем, т.к. скорость загрузки страницы не играла особой роли.
Сейчас же $(document).ready(function(){...}) не работает, по всем понятным причинам.
Я знаю как дождаться загрузки скрипта с известным названием, но не понимаю, как сделать универсально.
Если $(document).ready(function(){...}) заменить на window.onload = function() то ошибок вроде $ is undefined не возникает, но на некоторые элементы с id листенер не успевает повесится, и скрипт не срабатывает.
Оберните содержимое инлайн-скриптов в некую функцию method, например. Ждите, пока jQuery будет объявлено и после этого вызывайте функцию method.
function defer(method) {
if (window.jQuery)
method();
else
setTimeout(function() { defer(method) }, 50);
}
Пример с анонимной функцией:
defer(function () {
alert("jQuery is now loaded");
});
Изначально создаем переменную, отвечающую за загрузку всех скриптов и размещаем её в первом скрипте
var isScriptsLoad = false;
Далее в последнем скрипте делаем
isScrtiptsLoad = true;
Соответственно вставляем где нужно
if (isScriptsLoad) {
//code
};
И еще, у каждого скрипта должны быть атрибуты defer defend. Вроде должно работать.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости