NavigateEvent: NavigateEvent() constructor

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

The NavigateEvent() constructor creates a new NavigateEvent object instance.


new NavigateEvent(type, init)



A string representing the type of event. In the case of NavigateEvent this is always navigate.


An object containing the following properties:

canIntercept Optional

A boolean defining whether the navigation can be intercepted or not (e.g. you can't intercept a cross-origin navigation). Defaults to false.


A NavigationDestination object representing the location being navigated to.

downloadRequest Optional

The filename of the file requested for download, in the case of a download navigation (e.g. an <a> or <area> element with a download attribute). Defaults to null.

formData Optional

The FormData object representing the submitted data in the case of a POST form submission. Defaults to null.

hashChange Optional

A boolean defining if the navigation is a fragment navigation (i.e. to a fragment identifier in the same document). Defaults to false.

info Optional

The info data value passed by the initiating navigation operation (e.g. Navigation.back(), or Navigation.navigate()).

The type of the navigation. Possible values — push, reload, replace, and traverse. Defaults to push.


An AbortSignal, which will become aborted if the navigation is cancelled (e.g. by the user pressing the browser's "Stop" button, or another navigation starting and thus cancelling the ongoing one).

userInitiated Optional

A boolean defining whether the navigation was initiated by the user (e.g. by clicking a link, submitting a form, or pressing the browser's "Back"/"Forward" buttons). Defaults to false.


A developer would not use this constructor manually. A new NavigateEvent object is constructed when a handler is invoked as a result of the navigate event firing.

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)) {

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

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

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


HTML Standard
# the-navigateevent-interface

Browser compatibility

BCD tables only load in the browser

See also