Featherlight — лёгкая JavaScript-библиотека для создания модальных окон (lightbox), ориентированная на минимализм и использование jQuery. Одной из ключевых возможностей библиотеки является встраивание внешних HTML-страниц и ресурсов внутрь модального окна без перезагрузки основной страницы.
Встраивание внешних страниц применяется для отображения отдельных HTML-документов, форм, вспомогательных интерфейсов, справочных страниц и других изолированных частей сайта.
Featherlight использует AJAX-запросы для загрузки содержимого внешних страниц. Загруженный HTML встраивается непосредственно в DOM модального окна. При этом:
По умолчанию используется $.get() из jQuery.
Для загрузки внешнего HTML-документа достаточно указать путь к файлу
в атрибуте href и использовать
data-featherlight.
<a href="external.html" data-featherlight="ajax">
Открыть страницу
</a>
Ключевое значение ajax указывает Featherlight, что
содержимое должно быть загружено через AJAX.
При загрузке Featherlight вставляет всё содержимое
<body> внешнего документа. Теги
<html>, <head> и
<body> игнорируются.
Это означает:
<script> выполняются только если
явно разрешеноРекомендуется создавать внешние HTML-файлы как фрагменты, а не полноценные страницы.
Пример корректного внешнего файла:
<div class="modal-content">
<h2>Заголовок</h2>
<p>Текст загруженной страницы</p>
</div>
Featherlight поддерживает загрузку отдельного фрагмента внешнего документа с использованием CSS-селектора.
<a href="external.html #content" data-featherlight="ajax">
Открыть блок
</a>
В этом случае:
id="content"Это удобно для повторного использования страниц без дублирования кода.
Встраивание внешних страниц возможно и через JavaScript.
$.featherlight({
ajax: 'external.html'
});
Или с указанием селектора:
$.featherlight({
ajax: 'external.html #content'
});
Такой подход используется при программном открытии модальных окон без привязки к HTML-элементам.
Featherlight позволяет передавать параметры запроса стандартными средствами URL.
<a href="external.html?mode=edit&id=42" data-featherlight="ajax">
Открыть форму
</a>
На стороне сервера параметры доступны как обычные GET-переменные.
Для контроля процесса загрузки используются callback-функции.
$.featherlight({
ajax: 'external.html',
beforeOpen: function () {
console.log('Начало загрузки');
},
afterOpen: function () {
console.log('Контент загружен');
},
afterClose: function () {
console.log('Окно закрыто');
}
});
Если файл недоступен или сервер возвращает ошибку, Featherlight
выводит пустое модальное окно. Для обработки ошибок требуется перехват
AJAX-запроса через $.ajaxSetup() или собственный
загрузчик.
По умолчанию Featherlight не выполняет
<script> внутри загружаемого HTML. Это сделано из
соображений безопасности и производительности.
Для выполнения скриптов используются альтернативные подходы:
afterOpenПример:
$(document).on('featherlight:opened', function () {
initModalLogic();
});
Загружаемый HTML наследует стили основной страницы. Для изоляции внешнего контента рекомендуется:
.featherlight .modal-content {
padding: 20px;
max-width: 600px;
}
Featherlight не кэширует AJAX-ответы. При каждом открытии выполняется новый запрос. Для оптимизации можно:
Пример с предварительной загрузкой:
var cachedContent;
$.get('external.html', function (data) {
cachedContent = data;
});
$('#open').on('click', function () {
$.featherlight(cachedContent);
});
При встраивании внешних страниц действуют стандартные ограничения браузера:
Для сторонних ресурсов рекомендуется использовать
<iframe> вручную внутри модального окна.
Встраивание внешних страниц через Featherlight позволяет сохранить модульность интерфейса и снизить нагрузку на основной HTML-документ без усложнения архитектуры фронтенда.