Вызов JavaScript функции после загрузки динамического HTML
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Если вам нужно обеспечить немедленный вызов функции после загрузки динамически добавляемого JavaScript скрипта, установите обработчик onload
для созданного элемента script
:
let script = document.createElement('script');
script.onload = function() {
// Сейчас время действовать: вызываем вашу функцию
yourAwesomeFunction();
};
script.src = 'path_to_your_script.js'; // Проверьте корректность пути к скрипту
document.head.appendChild(script);
Такой подход гарантирует мгновенное и плавное выполнение функции yourAwesomeFunction
после загрузки скрипта path_to_your_script.js
.
Секреты кроссбраузерности
Не забудьте о поддержке Internet Explorer версий младше 9 при динамическом добавлении скриптов. Для этих целей воспользуемся свойством script.readyState
и обработчиком ошибок:
let script = document.createElement('script');
script.type = 'text/javascript';
// Более старые версии IE предпочитают классику, а не новомодные штуки
script.onreadystatechange = function() {
if (this.readyState === 'complete' || this.readyState === 'loaded') {
callback();
}
};
script.onload = callback;
script.onerror = function() {
// Сигнал о том, что что-то пошло не так
console.error('Упс! Что-то не так со скриптом.');
};
script.src = 'path_to_your_script.js';
document.getElementsByTagName('head')[0].appendChild(script);
// Функция обратного вызова
function callback() {
yourAwesomeFunction();
}
Традиции чистого JavaScript без применения jQuery
Если вы склоняетесь в сторону использования нативного JavaScript вместо jQuery, то вызов функции после загрузки скрипта можно осуществить с помощью атрибута onload
:
<!-- Прекрасный классический JavaScript без лишних добавок -->
<script src="path_to_your_script.js" onload="yourAwesomeFunction()"></script>
Этот подход прост и надёжен как хорошо выдержанное вино, но требует осторожности, чтобы избежать излишней связанности между логикой и представлением.
Скрипты и Promise: современные тенденции
Современный мир JavaScript это настоящий ароматный букет, где Promise играет роль изысканного вина. Используем их для успокоительной и гладкой загрузки скриптов:
const loadScript = function (src) {
return new Promise((resolve, reject) => {
let script = document.createElement('script');
script.src = src;
// Скрипт загружен – настало время в действие
script.onload = () => resolve(script);
// Произошла ошибка при загрузке
script.onerror = () => reject(new Error(`Ошибка загрузки скрипта ${src}`));
document.head.appendChild(script);
});
};
loadScript('path_to_your_script.js')
.then(script => yourAwesomeFunction())
.catch(error => console.log(`Ошибка при загрузке скрипта: ${error.message}`));
Для ещё более плавной работы используйте async
и await
:
async function loadAndExecute(src) {
try {
await loadScript(src);
yourAwesomeFunction();
} catch (error) {
console.log(`Ошибка при выполнении скрипта: ${error.message}`);
}
}
loadAndExecute('path_to_your_script.js');
Универсальный инструмент для загрузки скриптов
Создадим функцию loadScript
, которая будет загружать скрипты просто и быстро, как готовится растворимый кофе:
function loadScript(src, callback) {
let script = document.createElement('script');
script.src = src;
script.onload = () => callback();
script.onerror = () => console.error(`Ошибка загрузки скрипта ${src}.`);
document.documentElement.appendChild(script);
}
loadScript('path_to_your_script.js', () => console.log('Скрипт успешно загружен.'));
Эта функция loadScript
скоростная и эффективная и может быть использована в самых разнообразных сценариях. Это поистине универсальный инструмент для загрузки скриптов.
Визуализация
Давайте визуализируем процесс загрузки скриптов и выполнение функций. Представьте, что это путешествие поезда:
🚂: Экспресс 'Загрузка Скрипта'
Маршрут: 📜 Кодовый Депо -> 📞 Сетевая Остановка -> 🖥️ Браузерный Терминал
Используем атрибут onload
:
<!-- Вызываем функцию (разгружаем груз), когда поезд (скрипт) прибывает на конечную станцию (загружен) -->
<script src="your_script.js" onload="yourAwesomeFunction();"></script>
Когда экспресс добирается до Браузерного Терминала:
📢 "Уважаемые пассажиры, функция 'yourAwesomeFunction()' успешно прибыла на станцию. Все системы функционируют нормально!"
Устойчивый процесс работы обеспечивает безупречное выполнение функции сразу после загрузки скрипта.👌
Универсальные инструменты для обработки скриптов
От функции loadScript
с интегрированным обратным вызовом до TypeScript для обеспечения изоляции глобальных переменных – у вас в распоряжении целый арсенал инструментов:
// Версия на TypeScript
const loadScript = (src: string): Promise<void> => {
return new Promise((resolve, reject) => {
const script: HTMLScriptElement = document.createElement('script');
script.src = src;
// Когда скрипт будет загружен
script.onload = () => resolve();
// Если возникла ошибка при загрузке
script.onerror = () => reject(new Error(`Загрузка скрипта не удалась: ${src}`));
document.head.appendChild(script);
});
};
Если важна скорость, используйте технику JSONP и добавьте функцию loadedContent()
в конец загружаемого скрипта, чтобы ускорить процесс загрузки, по аналогии с Falcon 9.
Подходящий инструмент для подходящего скрипта
Выбор метода должен зависить от конкретной задачи: для маленьких проектов подойдут loadScript
и обратные вызовы, а для более сложных – Promise. Ключ к успеху – использование наиболее подходящего инструмента для каждого конкретного скрипта.
Полезные материалы
- Как подключить JavaScript файл в другом JavaScript файле? — в этой ветке на StackOverflow обсуждается динамическая загрузка JS.
- Ленивая загрузка | webpack — руководство по ленивой загрузке модулей в Webpack для улучшения времени загрузки.
- Скрипты: async, defer — информация про использование
async
иdefer
, а также детали динамической загрузки скриптов. - Обработчик 'onload' для тега 'script' в Internet Explorer — обсуждение на StackOverflow поведения
onload
в браузере IE. - Подробный анализ темной стороны загрузки скриптов — обзор различных стратегий загрузки скриптов для повышения веб-производительности.
<script>: Элемент Script
— обзор на MDN оasync
в скриптах и его использовании.<script>: Элемент Script
— обзорdefer
в скриптах на MDN.