Featherlight строит работу с загружаемым контентом вокруг концепции фильтров содержимого (content filters). Каждый фильтр отвечает за распознавание источника данных и преобразование полученного результата в DOM-узел, который затем помещается в lightbox. Такой подход позволяет гибко вмешиваться в процесс загрузки и отображения данных без изменения ядра библиотеки.
Фильтрация происходит до вставки контента в контейнер Featherlight, что делает этот механизм ключевым для:
По умолчанию Featherlight поставляется с набором стандартных фильтров, среди которых наиболее часто используются:
Каждый фильтр определяется объектом со следующими ключевыми элементами:
regex — регулярное выражение для определения
применимости фильтра;process — функция обработки входных данных;name — уникальное имя фильтра.Механизм выбора фильтра основан на первом совпадении
regex, что делает порядок фильтров критически важным.
Стандартные фильтры доступны через
$.featherlight.contentFilters и могут быть переопределены
или расширены. Это позволяет внедрять фильтрацию без полной замены
логики загрузки.
Пример сценариев применения:
<script> и <style> из
AJAX-ответов;Функция process получает исходные данные и объект
Featherlight, что даёт доступ к настройкам текущего экземпляра и
контексту вызова.
Добавление собственного фильтра выполняется путём расширения объекта
contentFilters. Пользовательский фильтр может перехватывать
как URL, так и уже загруженный контент.
Ключевые особенности:
false и
последующим вызовом setContent;Типичные случаи применения:
AJAX-фильтр является одним из наиболее чувствительных с точки зрения безопасности. Загружаемый HTML часто содержит:
На этапе фильтрации рекомендуется:
Featherlight не навязывает конкретный механизм очистки, оставляя это на уровне фильтра.
Фильтрация iframe-контента отличается от HTML и AJAX. Здесь основное внимание уделяется:
sandbox, allow,
referrerpolicy;Фильтр может модифицировать URL до создания iframe или управлять параметрами элемента после его инициализации.
Помимо content filters, Featherlight предоставляет жизненный цикл с колбэками, которые позволяют вмешиваться в работу с контентом:
beforeOpen — доступен до загрузки;afterContent — вызывается после вставки DOM-узла;beforeClose и afterClose — полезны для
очистки временных данных.Комбинация фильтров и колбэков позволяет выстраивать многоуровневую систему обработки, где первичная фильтрация выполняется на уровне данных, а вторичная — на уровне DOM.
Фильтрация объёмного контента может негативно сказаться на производительности. Основные приёмы оптимизации:
Фильтр должен выполнять только ту работу, которая необходима именно для отображения в lightbox, без дублирования логики основного приложения.
Featherlight не выполняет автоматическую защиту от XSS. Ответственность за безопасность полностью лежит на фильтрах и обработчиках:
Грамотно реализованная фильтрация превращает Featherlight из простого lightbox-компонента в контролируемую среду отображения внешнего и динамического контента.