Spec-Zone.ru › Web APIs

NavigateEvent

Ограниченное использование

Эта функция не относится к Baseline, так как она не работает во всех широко используемых браузерах.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Экспериментально: Это экспериментальная технология.Подробнее
Перед использованием в продакшене внимательно изучите таблицу совместимости с браузерами.

Интерфейс NavigateEvent API навигации — это объект события для события navigate, которое срабатывает при инициировании навигации любого типа (включая использование функций History API, таких как History.go()). NavigateEvent предоставляет доступ к информации об этой навигации и позволяет разработчикам перехватывать и контролировать обработку навигации.

Событие NavigateEvent

Конструктор

NavigateEvent() Экспериментально

Создает новый экземпляр объекта NavigateEvent.

Свойства экземпляра

Наследует свойства от родительского класса Event.

canIntercept Только для чтения Экспериментально

Возвращает true , если навигацию можно перехватить, или false в противном случае (например, вы не можете перехватить навигацию по другому домену).

destination Только для чтения Экспериментально

Возвращает объект NavigationDestination, представляющий конечную точку навигации.

downloadRequest Только для чтения Экспериментально

Возвращает имя файла, запрашиваемого для скачивания, в случае навигации для скачивания (например, элемент <a> или <area> с атрибутом download), или null в противном случае.

formData Только для чтения Экспериментально

Возвращает объект FormData, представляющий отправленные данные в случае отправки формы POST, или null в противном случае.

hashChange Только для чтения Экспериментально

Возвращает true если навигация — это навигация по фрагменту (т.е. к идентификатору фрагмента в том же документе), или false в противном случае.

hasUAVisualTransition Только для чтения Экспериментально

Возвращает true , если пользовательский агент выполнил визуальный переход для этой навигации до отправки этого события, или false в противном случае.

info Только для чтения Экспериментально

Возвращает значение данных info , переданные операцией инициации навигации (например, Navigation.back() или Navigation.navigate()), или undefined , если данные info не были переданы.

navigationType Только для чтения Экспериментально

Возвращает тип навигации — push, reload, replace, или traverse.

signal Только для чтения Экспериментально

Возвращает AbortSignal, который будет прерван, если навигация отменена (например, пользователем, нажатием кнопки "Стоп" браузера или началом другой навигации, которая отменяет текущую).

userInitiated Только для чтения Экспериментально

Возвращает true , если навигация была инициирована пользователем (например, нажатием ссылки, отправкой формы или нажатием кнопок "Назад" / "Вперед" браузера), или false в противном случае.

Методы экземпляра

Наследует методы от родительского класса Event.

intercept() Экспериментально

Перехватывает эту навигацию, преобразуя её в навигацию по документу к URL destination. Может принимать функцию-обработчик, которая определяет желаемое поведение обработки навигации, а также параметры focusReset и scroll для управления поведением по своему усмотрению.

scroll() Экспериментально

Может быть вызван для ручного запуска поведения прокрутки, инициируемого браузером, которое происходит в ответ на навигацию, если вы хотите, чтобы оно произошло до завершения обработки навигации.

Примеры

Обработка навигации с помощью intercept()

navigation.addEventListener("navigate", (event) => {
  // Exit early if this navigation shouldn't be intercepted,
  // e.g. if the navigation is cross-origin, or a download request
  if (shouldNotIntercept(event)) return;

  const url = new URL(event.destination.url);

  if (url.pathname.startsWith("/articles/")) {
    event.intercept({
      async handler() {
        // The URL has already changed, so show a placeholder while
        // fetching the new content, such as a spinner or loading page
        renderArticlePagePlaceholder();

        // Fetch the new content and display when ready
        const articleContent = await getArticleContent(url.pathname);
        renderArticlePage(articleContent);
      },
    });
  }
});

Примечание: До появления API навигации для достижения аналогичного результата необходимо было прослушивать все события клика по ссылкам, запускать e.preventDefault(), выполнять соответствующий вызов History.pushState(), а затем настраивать отображение страницы на основе нового URL. При этом это не обрабатывало все навигации, только инициированные пользователем клики по ссылкам.

Обработка прокрутки с помощью scroll()

В этом примере перехвата навигации функция handler() сначала извлекает и отображает содержимое статьи, а затем извлекает и отображает дополнительное содержимое. Имеет смысл прокрутить страницу к основному содержимому статьи как можно скорее после его получения, чтобы пользователь мог с ним взаимодействовать, а не ждать, пока будет также отображено дополнительное содержимое. Для этого мы добавили вызов scroll() между двумя операциями.

navigation.addEventListener("navigate", (event) => {
  if (shouldNotIntercept(navigateEvent)) return;
  const url = new URL(event.destination.url);

  if (url.pathname.startsWith("/articles/")) {
    event.intercept({
      async handler() {
        const articleContent = await getArticleContent(url.pathname);
        renderArticlePage(articleContent);

        event.scroll();

        const secondaryContent = await getSecondaryContent(url.pathname);
        addSecondaryContent(secondaryContent);
      },
    });
  }
});

Спецификации

Спецификация
HTML
# the-navigateevent-interface

Совместимость с браузерами

Рабочий стол Мобильный телефон
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
NavigateEvent 102 102 Нет 88 Нет 102 Нет 70 Нет 19.0 102
NavigateEvent 102 102 Нет 88 Нет 102 Нет 70 Нет 19.0 102
canIntercept 105102 105102 Нет 9188 Нет 105102 Нет 7270 Нет 20.019.0 105102
destination 102 102 Нет 88 Нет 102 Нет 70 Нет 19.0 102
downloadRequest 102 102 Нет 88 Нет 102 Нет 70 Нет 19.0 102
formData 102 102 Нет 88 Нет 102 Нет 70 Нет 19.0 102
hasUAVisualTransition 118 118 Нет 104 Нет 118 Нет 79 Нет 25.0 118
hashChange 102 102 Нет 88 Нет 102 Нет 70 Нет 19.0 102
info 102 102 Нет 88 Нет 102 Нет 70 Нет 19.0 102
intercept 105102–108 105102–108 Нет 9188–94 Нет 105102–108 Нет 7270–73 Нет 20.019.0–21.0 105102–108
navigationType 102 102 Нет 88 Нет 102 Нет 70 Нет 19.0 102
scroll 105102–108 105102–108 Нет 9188–94 Нет 105102–108 Нет 7270–73 Нет 20.019.0–21.0 105102–108
signal 102 102 Нет 88 Нет 102 Нет 70 Нет 19.0 102
userInitiated 102 102 Нет 88 Нет 102 Нет 70 Нет 19.0 102

См. также

  • Современный маршрутизация на стороне клиента: API навигации
  • Пояснения к API навигации
  • Демонстрация API навигации от Domenic Denicola здесь

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/NavigateEvent

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API