Start · Sprachen · JavaScript · Referenz · new NavigateEvent()

new NavigateEvent()

Methode

Erzeugt ein neues, synthetisches <code>NavigateEvent</code>-Objekt, wie es die Navigation API beim Ereignis <code>navigate</code> verwendet.

seit JavaScript Navigation API: Chromium 102+ (Chrome, Edge, Opera Kategorie: webapi

Signatur

new NavigateEvent(type, eventInitDict)

Beschreibung

Der Konstruktor NavigateEvent() erzeugt eine neue Instanz von NavigateEvent. Normalerweise legt der Browser solche Objekte selbst an und löst sie bei jeder Navigation als Ereignis navigate auf window.navigation aus. Mit dem Konstruktor kannst du eigene, nicht vertrauenswürdige Ereignisse (isTrusted === false) mit denselben Eigenschaften erstellen.

Gebraucht wird das vor allem in Tests und beim Simulieren: Du rufst die Routing-Logik einer Single-Page-App mit einem präparierten Ereignis auf, prüfst Verzweigungen nach navigationType, hashChange oder formData oder reichst ein Ereignis an eigene EventTarget-Objekte weiter.

Wichtig: Das Init-Objekt muss destination (ein NavigationDestination) und signal (ein AbortSignal) enthalten. Einen NavigationDestination kann man per Skript nicht selbst erzeugen. In der Praxis übernimmst du ihn deshalb aus einem echten navigate-Ereignis. Ein synthetisches Ereignis löst außerdem keine echte Navigation aus.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, in der Regel "navigate". Groß- und Kleinschreibung zählt.
$eventInitDict Pflicht object Init-Objekt. Es erbt die Felder aus EventInit (bubbles, cancelable, composed) und hat zusätzlich folgende Felder:
  • destination (NavigationDestination, Pflicht): Ziel der Navigation.
  • signal (AbortSignal, Pflicht): Signal, das einen Abbruch der Navigation meldet.
  • navigationType ("push" | "replace" | "reload" | "traverse", Standard "push"): Art der Navigation.
  • canIntercept (boolean, Standard false): Gibt an, ob die Navigation abgefangen werden darf.
  • userInitiated (boolean, Standard false): Gibt an, ob der Nutzer die Navigation ausgelöst hat.
  • hashChange (boolean, Standard false): Gibt an, ob sich nur der Fragment-Teil der URL ändert.
  • formData (FormData | null, Standard null): Formulardaten bei POST-Übermittlungen.
  • downloadRequest (string | null, Standard null): Dateiname, wenn es sich um einen Download handelt (<a download>).
  • info (any, Standard undefined): Beliebige Zusatzdaten, etwa aus navigation.navigate(url, { info }).
  • hasUAVisualTransition (boolean, Standard false): Gibt an, ob der Browser bereits einen eigenen visuellen Übergang zeigt.
  • sourceElement (Element | null, Standard null, neuere Implementierungen): Element, das die Navigation ausgelöst hat.

Rückgabewert

Typ
NavigateEvent
Beschreibung
Ein neues NavigateEvent-Objekt mit den übergebenen Werten. isTrusted ist dabei immer false.

Beispiele

Synthetisches Ereignis aus einem echten navigate-Ereignis ableiten

navigation.addEventListener("navigate", (event) => {
  const controller = new AbortController();

  // destination lässt sich nur aus einem echten Ereignis übernehmen
  const kopie = new NavigateEvent("navigate", {
    destination: event.destination,
    signal: controller.signal,
    navigationType: "replace",
    canIntercept: true,
    info: { quelle: "test" },
  });

  console.log(kopie.navigationType, kopie.info.quelle, kopie.isTrusted);
}, { once: true });

navigation.navigate("#abschnitt-2");
replace test false

Router-Logik testen, ohne wirklich zu navigieren

// Zu testende Router-Funktion
const behandleNavigation = (event) => {
  if (event.hashChange || event.downloadRequest !== null) return "ignoriert";
  if (event.formData) return "formular";
  return `route:${new URL(event.destination.url).pathname}`;
};

navigation.addEventListener("navigate", (echt) => {
  const controller = new AbortController();
  const basis = { destination: echt.destination, signal: controller.signal };

  const formData = new FormData();
  formData.append("q", "javascript");

  console.log(behandleNavigation(new NavigateEvent("navigate", { ...basis, hashChange: true })));
  console.log(behandleNavigation(new NavigateEvent("navigate", { ...basis, formData })));
}, { once: true });

navigation.navigate("#test");
ignoriert formular

Funktionsprüfung und Abbruchsignal

if ("NavigateEvent" in window) {
  navigation.addEventListener("navigate", (echt) => {
    const controller = new AbortController();
    const ev = new NavigateEvent("navigate", {
      destination: echt.destination,
      signal: controller.signal,
    });

    ev.signal.addEventListener("abort", () => console.log("Navigation abgebrochen"));
    controller.abort();
    console.log(ev.signal.aborted);
  }, { once: true });

  navigation.navigate("#x");
} else {
  console.log("Navigation API wird nicht unterstützt");
}
Navigation abgebrochen true