0Pricing
HTML Academy · Урок

Navigation API в современных браузерах

Используйте Navigation API для перехвата и настройки переходов

«Navigation API в современных браузерах» — бесплатный урок HTML Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.

Современная замена

Navigation API — более новая и мощная замена History API. Она рассматривает навигацию как полноценные объекты, которые можно перехватывать, прерывать и ожидать, — это ближе к тому, как SPA действительно должны обрабатывать маршрутизацию в 2024 году.

Объект window.navigation

window.navigation предоставляет список записей, текущую запись и событие navigate. navigation.entries() возвращает каждую запись текущей истории; navigation.currentEntry — активную запись. Это отличается от непрозрачной длины и недоступного для чтения состояния API истории.

Событие navigate

Слушайте navigation.addEventListener("navigate", handler), чтобы перехватывать любую навигацию в пределах одного документа — нажатия на ссылки, отправку форм, переходы назад и вперёд, а также программную навигацию. Один обработчик заменяет набор разрозненных обработчиков нажатий, popstate и отправки форм.

navigation.addEventListener("navigate", (e) => {
  if (!e.canIntercept) return;
  e.intercept({
    handler: async () => {
      await renderPage(new URL(e.destination.url).pathname);
    }
  });
});

intercept и handler

Вызов e.intercept({ handler }) перехватывает навигацию. Обработчик возвращает обещание; пока оно ожидается, навигация «выполняется», а адрес уже обновлён. Это устраняет историческую гонку между изменением адреса и отображением представления.

Проверка canIntercept

Не все переходы можно перехватить (переходы между источниками, загрузки). Проверьте e.canIntercept перед вызовом intercept. Эта защитная проверка в одну строку отличает навигацию SPA от настоящего перехода на другой источник.

Метод navigation.navigate

navigation.navigate(url, options) программно запускает навигацию, эквивалентную нажатию. Возвращаемый объект содержит обещания committed и finished, поэтому можно дождаться изменения адреса или полного завершения обработчика.

Состояние записи и ключи

У каждой записи навигации есть стабильный ключ, сохраняющийся при перезагрузках, и идентификатор, действующий в пределах сеанса. Используйте ключ для постоянного состояния (сохранённых позиций прокрутки, черновиков форм), а идентификатор — для временного состояния. Единственным состоянием API истории был непрозрачный блок данных.

Переходы назад и вперёд

navigation.back() и navigation.forward() — удобные оболочки вокруг traverseTo. Они возвращают ту же пару обещаний: одно для фиксации перехода, другое для его завершения, поэтому можно дождаться перехода назад перед выполнением дальнейших действий.

Отмена навигации

Если пользователь нажмёт вторую ссылку, пока первая ещё отображается, незавершённую навигацию можно отменить. Обработчик получает AbortSignal через e.signal; передавайте его в вызовы загрузки данных, чтобы устаревшая работа отменялась при начале новой навигации.

e.intercept({
  handler: async () => {
    const data = await fetch(url, { signal: e.signal });
    renderPage(await data.json());
  }
});

Почему просто не использовать историю

Интерфейс истории работает, но с ним неудобно: изменения состояния и отрисовка представления не связаны, обработку нажатий приходится писать вручную, координация нескольких обработчиков ненадёжна, а восстановление прокрутки неполно. Интерфейс навигации с самого начала создавался для потребностей SPA и решает каждую из этих проблем.

Поддержка браузерами

Chrome и Edge поддерживают интерфейс навигации. Safari и Firefox отстают (по состоянию на начало 2026 года); выпускайте код с проверкой поддержки функции ("navigation" in window) и при недоступности используйте запасной вариант на основе интерфейса истории и события изменения истории. Фреймворки вроде SvelteKit и маршрутизатора TanStack уже скрывают эту проверку.

Когда внедрять

Для новых проектов, ориентированных прежде всего на аудиторию Chromium, внедряйте его сейчас и примите запасной вариант на основе интерфейса истории. Для общедоступных сайтов с широкой аудиторией дождитесь поддержки Safari и Firefox (или используйте библиотеку маршрутизации, скрывающую различия). Более простой интерфейс стоит того, чтобы подождать.

Проверка знаний

В чём главное преимущество события навигации в интерфейсе навигации по сравнению с сочетанием события изменения истории и ручного перехвата нажатий в интерфейсе истории?

Итоги

Интерфейс навигации объединяет навигацию SPA в рамках единого события навигации с семантикой intercept и отмены, стабильными ключами для каждого entry и ожиданием асинхронного обработчика. Он заменяет лоскутное сочетание интерфейса истории, события изменения истории и перехвата нажатий. Сегодня он поддерживается в браузерах на Chromium; проверяйте наличие функции и используйте интерфейс истории как запасной вариант в кроссбраузерном коде, пока Safari и Firefox не догонят.

Часто задаваемые вопросы

Урок «Navigation API в современных браузерах» бесплатный?

Да — полный текст урока «Navigation API в современных браузерах» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.

Чему я научусь в уроке «Navigation API в современных браузерах»?

Используйте Navigation API для перехвата и настройки переходов Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать HTML Academy?

Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Navigation API в современных браузерах»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке HTML Academy?

Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. pushState и replaceState
  2. Событие popstate
  3. Маршрутизация на основе хеша и пути
  4. Navigation API в современных браузерах
← Назад к HTML Academy