NavigateEvent
Ограниченное использование
Эта функция не относится к Baseline, так как она не работает во всех широко используемых браузерах.
Экспериментально: Это экспериментальная технология.Подробнее
Перед использованием в продакшене внимательно изучите таблицу совместимости с браузерами.
Интерфейс NavigateEvent API навигации — это объект события для события navigate, которое срабатывает при инициировании навигации любого типа (включая использование функций History API, таких как History.go()). 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не были переданы. -
Возвращает тип навигации —
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