Page.js — это минималистичная библиотека для маршрутизации на стороне клиента в JavaScript, которая позволяет управлять историей браузера и навигацией без перезагрузки страницы. Одной из ключевых возможностей является управление действиями пользователя при переходе назад и вперед, используя History API браузера.
Page.js опирается на стандартное window.history,
предоставляя методы:
page(path, callback) — определяет маршрут и
обработчик.page.show(path, [state], [dispatch]) — программно
инициирует переход на указанный путь.page.back() — инициирует переход на предыдущую страницу
истории.page.start([options]) — активирует маршрутизацию.Page.js скрывает работу с History API, но важно понимать базовые методы:
history.pushState(state, title, url) — добавляет новый
элемент в стек истории без перезагрузки страницы.history.replaceState(state, title, url) — заменяет
текущий элемент истории.popstate вызывается при навигации назад или
вперед, Page.js использует его для обработки маршрутов.Для перехода назад в истории используется метод
page.back(). Он эквивалентен вызову
history.back(), но с интеграцией обработчиков маршрутов
Page.js:
// Переход на предыдущий маршрут
document.getElementById('backBtn').addEventListener('click', () => {
page.back();
});
Метод page.back() учитывает текущий стек маршрутов,
гарантируя, что корректный обработчик будет вызван при возврате на
предыдущий маршрут.
Метод page.forward() в Page.js отсутствует как отдельная
функция, но стандартный браузерный history.forward()
полностью поддерживается. Для интеграции с маршрутизатором Page.js
достаточно вызвать:
document.getElementById('forwardBtn').addEventListener('click', () => {
history.forward();
});
Page.js автоматически обработает вызов popstate, вызвав
соответствующий маршрут.
Page.js подписывается на событие popstate для
реагирования на действия пользователя при нажатии кнопок «назад» и
«вперед». Внутри библиотеки это реализуется через:
window.addEventListener('popstate', (event) => {
const path = window.location.pathname;
page._dispatch(path, event.state);
});
Метод _dispatch вызывает соответствующий обработчик
маршрута, передавая объект состояния, если он был установлен через
page.show().
Page.js позволяет передавать объект состояния при переходе:
page.show('/profile', { from: 'dashboard' });
При навигации назад или вперед объект состояния доступен в
обработчике маршрута через ctx.state:
page('/profile', (ctx) => {
console.log(ctx.state.from); // 'dashboard'
});
Это удобно для хранения дополнительной информации, например, позиции скролла или фильтров на странице.
Если требуется реализовать кнопку «назад» внутри интерфейса:
function goBack() {
if (history.length > 1) {
page.back();
} else {
page.show('/home'); // fallback на главную страницу
}
}
Такой подход предотвращает уход на несуществующие страницы в истории.
При использовании Page.js можно перехватывать попытки пользователя уйти с текущей страницы с помощью:
window.addEventListener('beforeunload', (event) => {
event.preventDefault();
event.returnValue = '';
});
Хотя это не напрямую связано с Page.js, сочетание с навигацией назад позволяет контролировать состояние приложения перед изменением маршрута.
ctx.state для хранения данных,
которые могут понадобиться при возврате на предыдущий маршрут.page.show() с
естественными переходами через кнопки браузера для консистентного
UX.page.replace() текущая запись истории
заменяется, что влияет на кнопки «назад» и «вперед».ctx.state,
иначе при возврате данные могут потеряться.Навигация назад и вперед в Page.js строится на взаимодействии с
History API, обработке событий popstate и передаче
состояния маршрута. Грамотное использование этих инструментов позволяет
создавать плавные SPA-интерфейсы с корректной историей страниц,
минимизируя перезагрузки и обеспечивая предсказуемое поведение
навигации.