Библиотека Page.js предоставляет лёгкий и гибкий способ организации маршрутизации на клиентской стороне, сохраняя возможность обратной совместимости с различными версиями браузеров и старым кодом. Обратная совместимость в контексте Page.js означает, что маршруты, созданные в предыдущих версиях библиотеки или реализованные с учётом устаревших API браузеров, продолжают корректно работать без необходимости полной переработки кода.
Page.js использует HTML5 History API, но при
необходимости может автоматически переключаться на hash-based
routing. Это позволяет поддерживать старые браузеры, которые не
поддерживают pushState и replaceState.
Основные моменты:
#, что обеспечивает совместимость с
устаревшими браузерами. Например, маршрут /about
превращается в /#/about.Пример включения hash-режима для обратной совместимости:
page({
hashbang: true
});
page('/home', function(ctx) {
console.log('Home route');
});
page.start();
Параметр hashbang: true заставляет Page.js использовать
формат #!/route для маршрутов, что гарантирует корректную
работу на старых браузерах.
Для работы в Internet Explorer 9 и ниже необходимо использовать
полифиллы для History API и ES5-совместимый JavaScript. Page.js сама по
себе не требует особой доработки, если код написан с учётом ES5, но для
полноценной работы с pushState полифиллы обязательны.
Основные рекомендации:
history.js или аналогичный.if (!window.history.pushState) {
page({ hashbang: true });
} else {
page();
}
Это гарантирует, что даже при отсутствии поддержки History API маршруты будут работать через hash.
Page.js поддерживает динамические маршруты, где
параметры передаются через :param в пути. Старые маршруты
могут использовать синтаксис с двоеточием, и библиотека корректно
обрабатывает их независимо от версии браузера.
Пример динамического маршрута:
page('/user/:id', function(ctx) {
console.log('User ID:', ctx.params.id);
});
Даже при переключении на hash-режим ctx.params.id будет
доступен, и функциональность не нарушится.
Для обратной совместимости важно учитывать обработку переходов и возвратов назад. Page.js корректно управляет историей браузера:
page.redirect('/new') – замена текущего маршрута на
новый.page.show('/another') – отображение маршрута без
изменения истории.ctx.path и ctx.pathname доступны как в
pushState, так и в hash-режиме.Эти методы гарантируют, что старый код, который опирается на изменение URL или обработку переходов, продолжает работать корректно.
Старые HTML-ссылки с атрибутом href тоже могут
оставаться рабочими:
<a href="/contact">Contact</a>
Page.js перехватывает клики по ссылкам и предотвращает стандартное
поведение браузера, но при hash-режиме URL автоматически преобразуется в
/#/contact. Это позволяет сохранить совместимость с
существующими шаблонами и CMS, где ссылки уже заданы.
Для проектов с Page.js версии 0.x или ранними 1.x:
page(path, fn) без ctx.ctx.hashbang: true, если проект
поддерживает старые браузеры.redirect и show.Таким образом, обратная совместимость обеспечивает плавную интеграцию новых функций без разрушения существующей логики маршрутизации.
Если требуется, Page.js можно конфигурировать под абсолютно старые
браузеры без History API, используя комбинацию hashbang,
полифиллов и адаптированных колбэков, что делает библиотеку надёжным
инструментом для проектов с разными требованиями к совместимости.