Unpoly — это современная JavaScript-библиотека для динамического обновления содержимого страниц без полной перезагрузки. Одной из её ключевых особенностей является встроенная поддержка полифиллов, которые обеспечивают совместимость с более старыми браузерами, сохраняя при этом современный API и поведение.
Unpoly включает в себя несколько встроенных полифиллов, которые автоматически активируются при необходимости:
Element.matches — метод для проверки,
соответствует ли элемент заданному CSS-селектору. Полифилл обеспечивает
его поддержку в IE9+ и старых версиях Safari.CustomEvent — полифилл для создания
собственных событий в браузерах, где CustomEvent не
реализован нативно. Это критично для системы событий Unpoly, которая
использует их для уведомления о завершении обновления фрагментов
страницы.requestAnimationFrame — обеспечивает
плавное выполнение анимаций и визуальных эффектов при обновлении
контента. В старых браузерах заменяется тайм-аутом с минимальной
задержкой.Все полифиллы встроены так, чтобы не создавать конфликтов с уже существующими реализациями. Если браузер поддерживает метод нативно, Unpoly его не переопределяет.
При подключении библиотеки Unpoly проверяет окружение и включает
необходимые полифиллы автоматически. Например, если браузер не
поддерживает Element.closest, будет подключен
соответствующий полифилл.
Ключевые особенности механизма:
Хотя большинство полифиллов встроено по умолчанию, есть возможность отключить их и подключать свои версии при необходимости. Это особенно полезно в проектах с жёсткими требованиями к размеру скриптов или при использовании собственных оптимизированных полифиллов.
Пример отключения встроенного полифилла CustomEvent:
up.polyfills = {
CustomEvent: false
};
После этого можно подключить стороннюю реализацию:
(function() {
function CustomEventPolyfill(event, params) {
params = params || { bubbles: false, cancelable: false, detail: null };
var evt = document.createEvent('CustomEvent');
evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
return evt;
}
window.CustomEvent = window.CustomEvent || CustomEventPolyfill;
})();
Полифиллы особенно важны при использовании модульной структуры
Unpoly. Функции, такие как up.fragment или
up.link, часто опираются на методы DOM, которые могут
отсутствовать в старых браузерах. Встроенные полифиллы гарантируют, что
эти модули работают корректно без дополнительных настроек.
Например, при динамической подгрузке фрагмента страницы:
up.fragment.fetch('/users/42', { target: '#user-profile' });
Метод использует Element.matches и
CustomEvent. В браузерах без поддержки этих методов Unpoly
автоматически подключит полифиллы, что обеспечит правильное выполнение
скрипта.
Для проектов, где необходимо строгий контроль совместимости, Unpoly позволяет проверить, какие полифиллы активированы:
console.log(up.polyfills);
Это выводит объект с текущим состоянием полифиллов и помогает убедиться, что все необходимые методы доступны перед запуском сложной логики.
Встроенные полифиллы являются фундаментом стабильной работы Unpoly на различных браузерах и обеспечивают одинаковый опыт использования для всех пользователей, независимо от версии их браузера.