Back: примеры (JAVASCRIPT)
back: undefinedОсновы функции history.back()
Метод history.back() принадлежит объекту window.history и предназначен для навигации назад по истории сессии текущей вкладки или фрейма. Этот метод имитирует нажатие пользователем кнопки "Назад" в браузере.
Когда используется: Функция применяется для программного возврата пользователя на предыдущую страницу в истории навигации. Это часто встречается в одностраничных приложениях (SPA) для управления роутингом, в модальных окнах, которые нужно закрывать с возвратом на предыдущий URL, или в кастомных навигационных элементах интерфейса.
Аргументы: Метод history.back() не принимает никаких параметров.
Возвращаемое значение: undefined. Метод не возвращает значимого значения, его действие заключается в инициации асинхронной навигации.
Важно понимать, что history.back() работает асинхронно. Браузер ставит задачу навигации в очередь, и переход может быть обработан через некоторое время. Сам переход можно отследить с помощью события popstate на объекте window.
Простые примеры использования
Базовый вызов функции для возврата на одну страницу назад.
// Вызов при клике на кнопку
const backButton = document.getElementById('backBtn');
backButton.addEventListener('click', () => {
window.history.back();
});// При клике браузер перейдет на предыдущий URL в истории.
Вызов напрямую из консоли или кода.
// Простой вызов
window.history.back();
// Или просто
history.back();// Сразу инициируется переход назад.
Похожие методы History API
- history.forward(): Переход на одну страницу вперед по истории. Аналог кнопки "Вперед" в браузере.
- history.go(n): Универсальный метод для навигации по истории. Принимает целочисленный аргумент.
history.go(-1)эквивалентноhistory.back(),history.go(1)—history.forward(). Можно переходить сразу на несколько шагов. - history.pushState() и history.replaceState(): Эти методы не осуществляют навигацию, а изменяют запись в истории браузера без перезагрузки страницы.
pushState()добавляет новую запись,replaceState()модифицирует текущую. Часто используются в SPA вместе с событиемpopstate.
Когда что использовать: back() и forward() удобны для простых навигационных действий. go() дает больше контроля, если нужно переместиться на несколько шагов. pushState/replaceState — ключевые инструменты для построения клиентского роутинга в современных веб-приложениях.
Типичные ошибки
1. Ожидание мгновенного перехода и выполнение кода после вызова. Поскольку back() асинхронна, код после нее выполнится до завершения навигации.
console.log('Начинаем переход');
history.back();
console.log('Этот код выполнится сразу, а не после перехода');
// Не стоит здесь обращаться к обновленному DOMНачинаем переход Этот код выполнится сразу, а не после перехода
2. Использование в iframe без доступа к родительской истории. Если iframe и основная страница имеют разные источники (разные домены), доступ к истории родителя из iframe будет ограничен политикой безопасности CORS.
3. Вызов, когда история пуста. Если в истории сессии нет предыдущей страницы (пользователь открыл страницу в новой вкладке), вызов history.back() не произведет никакого видимого эффекта. Для обработки этого случая можно проверять свойство history.length.
if (history.length > 1) {
history.back();
} else {
console.log('Некуда возвращаться');
// Альтернативное действие, например, закрытие модального окна
}Изменения в последних версиях
Сам метод history.back() остается неизменным и стабильным на протяжении многих лет, так как является частью фундаментального History API.
Основные изменения касаются не самой функции, а контекста ее использования. Современные браузеры, особенно в режиме инкогнито или при строгих настройках, могут ограничивать доступ к методу из-за политик безопасности. Также появились и развиваются более новые API для навигации, такие как Navigation API, который предлагает более продвинутый интерфейс для управления навигацией и историей, особенно в контексте одностраничных приложений. Однако history.back() продолжает поддерживаться для обратной совместимости.
Расширенные примеры
1. Комбинация с событием popstate. Для реакции на переход, инициированный back().
window.addEventListener('popstate', function(event) {
console.log('Произошел переход по истории. Текущее состояние:', event.state);
// Можно обновить интерфейс в соответствии с event.state
updateUIForState(event.state);
});
// Программный вызов перехода
history.back();// В консоль будет выведено сообщение, когда браузер обработает переход.
2. Предотвращение ухода со страницы. Вместе с событием beforeunload или onbeforeunload. Обратите внимание, что современные браузеры сильно ограничивают кастомизацию сообщений в beforeunload.
// Установка обработчика, который сработает при попытке уйти (включая history.back())
window.onbeforeunload = function(e) {
if (hasUnsavedChanges) {
// Стандартизированный способ — возврат строки (хотя браузер может ее игнорировать)
e.preventDefault();
e.returnValue = ''; // Требуется для Chrome
return ''; // Для старых браузеров
}
};
// Теперь при вызове history.back(), если hasUnsavedChanges === true,
// браузер покажет диалог подтверждения.3. Создание кастомной кнопки "Назад" с логикой.
document.querySelector('.custom-back-btn').addEventListener('click', (e) => {
e.preventDefault();
// Если открыто модальное окно, сначала закрываем его
const modal = document.querySelector('.modal.show');
if (modal) {
closeModal(modal);
return;
}
// Если мы на определенной глубине SPA-роута, делаем popstate навигацию
if (currentAppRouteDepth > 1) {
router.go(-1); // Пример вызова роутера приложения
} else {
// Иначе используем стандартный переход браузера
history.back();
}
});4. Эмуляция многократного возврата. С использованием history.go().
// Вернуться на 3 шага назад
goTimes(-3);
function goTimes(steps) {
if (history.length > Math.abs(steps)) {
history.go(steps);
} else {
// Если шагов больше, чем записей в истории, идем на самое начало
history.go(-(history.length - 1));
}
}Аналоги в других языках
Концепция истории браузера специфична для клиентского JavaScript и среды браузера. Прямых аналогов в серверных или системных языках программирования нет, так как они не управляют навигацией в браузере. Однако можно провести аналогию с навигацией по стеку или истории действий.
Python (веб-фреймворк, например, Flask/Django): На сервере управление "назад" обычно реализуется через редиректы или сохранение состояния в сессии.
# Flask пример редиректа на предыдущую страницу
from flask import request, redirect, url_for
@app.route('/go-back')
def go_back():
# Возврат на предыдущую страницу (если referer указан)
return redirect(request.referrer or url_for('index'))Сервер отправляет браузеру команду 302 Redirect на URL из заголовка Referer.
PHP: Аналогично, с использованием заголовка HTTP_REFERER.
// PHP редирект назад
header('Location: ' . $_SERVER['HTTP_REFERER']);
exit;Выполняется серверный редирект.
Эти подходы принципиально отличаются от history.back(), так как требуют нового запроса к серверу и полной перезагрузки страницы, в то время как JavaScript-метод работает на клиенте в рамках текущей сессии и может не вызывать перезагрузку (например, при использовании с pushState).