Featherlight — это лёгкая и минималистичная библиотека для создания модальных окон (lightbox) в JavaScript. Основной её принцип заключается в простоте интеграции и высокой гибкости: она предоставляет удобный способ отображать изображения, HTML-контент и AJAX-запросы без громоздкого кода. Featherlight основана на jQuery и использует его возможности для манипуляции DOM и событий.
Для работы с Featherlight необходимо подключить jQuery, после чего подключается сам плагин и его стили:
<link href="featherlight.min.css" rel="stylesheet">
<script src="jquery.min.js"></script>
<script src="featherlight.min.js"></script>
Инициализация осуществляется через вызов метода
.featherlight() на выбранных элементах:
$('.lightbox-trigger').featherlight({
targetAttr: 'data-featherlight'
});
Здесь targetAttr указывает, где хранится содержимое,
которое нужно открыть в модальном окне. По умолчанию используется
href.
Featherlight поддерживает несколько типов контента:
href или data-featherlight.Пример открытия HTML-контента из страницы:
<a href="#" data-featherlight="#inline-content">Открыть контент</a>
<div id="inline-content" style="display:none;">
<h2>Заголовок</h2>
<p>Текст внутри модального окна.</p>
</div>
Featherlight предоставляет множество опций для настройки:
closeOnClick — закрытие по клику на фоне
(true по умолчанию).closeIcon — кастомная иконка закрытия.openSpeed и closeSpeed — скорость анимации
открытия и закрытия.beforeOpen, afterOpen,
beforeClose, afterClose — колбэки для
управления жизненным циклом модального окна.Пример использования колбэков:
$('.lightbox-trigger').featherlight({
beforeOpen: function() {
console.log('Окно скоро откроется');
},
afterClose: function() {
console.log('Окно закрыто');
}
});
Работа с внешним или динамическим HTML-контентом требует особого внимания к безопасности. Featherlight позволяет вставлять любые HTML-строки, что создаёт риск XSS-атак. Санитизация HTML — обязательный шаг при использовании пользовательских данных. Основные подходы:
Использование библиотек для очистки HTML Библиотеки вроде DOMPurify позволяют безопасно фильтровать HTML:
var cleanHtml = DOMPurify.sanitize(userInputHtml);
$.featherlight(cleanHtml);
DOMPurify удаляет все скрипты, потенциально опасные атрибуты
(onload, onclick) и теги, которые могут
выполнять код.
Удаление скриптов и событий вручную Если не использовать сторонние библиотеки, можно очищать контент через jQuery:
var $content = $(userInputHtml);
$content.find('script').remove();
$content.find('*[onload], *[onclick]').removeAttr('onload onclick');
$.featherlight($content.html());
Этот метод менее безопасен и требует внимательной проверки всех возможных способов внедрения скриптов.
Ограничение тегов и атрибутов Эффективная
стратегия — разрешать только определённый набор тегов
(<p>, <b>, <i>,
<a>, <img> с безопасными src).
Остальные элементы удаляются:
var allowedTags = ['p', 'b', 'i', 'a', 'img'];
var $content = $(userInputHtml).filter(function() {
return allowedTags.includes(this.tagName.toLowerCase());
});
$.featherlight($content);При загрузке контента с сервера важно комбинировать AJAX с санитизацией. Пример безопасного вызова:
$.featherlight({
ajax: '/get-content',
beforeContent: function() {
var sanitized = DOMPurify.sanitize(this.$content.html());
this.$content.html(sanitized);
}
});
Здесь контент загружается динамически, но перед отображением проходит через фильтр безопасности.
Featherlight сочетает простоту использования с гибкостью, но при работе с HTML-контентом особое внимание следует уделять санитизации и предотвращению XSS, так как библиотека напрямую вставляет HTML в DOM.