Signatur
Beschreibung
Ein Location-Objekt beschreibt die aktuelle Adresse (URL) eines Browsing-Kontexts. Es ist über window.location und document.location erreichbar – beide verweisen auf dasselbe Objekt. Die Eigenschaften zerlegen die URL in ihre Bestandteile: href (gesamte URL), protocol, host, hostname, port, pathname, search (Query-String inkl. ?), hash (Fragment inkl. #) sowie die schreibgeschützte origin. Zusätzlich liefert ancestorOrigins (nicht in Firefox) die Origins übergeordneter Frames.
Anders als ein reines URL-Objekt ist Location aktiv: Das Setzen fast jeder Eigenschaft löst eine Navigation aus. Wer location.pathname oder location.search ändert, lädt eine neue Seite; das Ändern von location.hash springt dagegen nur zum Anker und löst ein hashchange-Event aus, ohne die Seite neu zu laden.
Die Methoden steuern die Navigation gezielt:
assign(url)– navigiert zur URL und legt einen neuen Eintrag im Verlauf an (entsprichtlocation.href = url).replace(url)– navigiert, ersetzt aber den aktuellen Verlaufseintrag; der Zurück-Button führt nicht zur alten Seite zurück.reload()– lädt das aktuelle Dokument neu.toString()– lieferthrefals String.
Zum reinen Lesen und Analysieren von Parametern kombiniert man location am besten mit URL bzw. URLSearchParams. Für URL-Änderungen ohne Neuladen (z. B. in Single-Page-Apps) ist die History-API (history.pushState()) das passende Werkzeug.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $url Pflicht | string | URL | Nur bei assign() und replace(): Ziel-URL, absolut oder relativ zur aktuellen Dokument-URL. |
|
| $forceGet | boolean | false | Nicht standardisierter Parameter von reload(), nur in Firefox wirksam (umgeht den Cache). Andere Browser ignorieren ihn – nicht verwenden. |
Rückgabewert
window.location bzw. document.location liefern das Location-Objekt des Dokuments. Die Methoden assign(), replace() und reload() geben undefined zurück.Beispiele
URL-Bestandteile auslesen
// Angenommen: https://shop.example.com:8080/produkte/liste?kategorie=buecher&seite=2#top
const { href, protocol, host, hostname, port, pathname, search, hash, origin } = window.location;
console.log(protocol); // Protokoll inkl. Doppelpunkt
console.log(host); // Host inkl. Port
console.log(pathname);
console.log(search);
console.log(hash);
console.log(origin);
Query-Parameter mit URLSearchParams auswerten
// Aktuelle URL: https://example.com/suche?q=javascript&seite=3
const params = new URLSearchParams(location.search);
const suchbegriff = params.get('q') ?? '';
const seite = Number(params.get('seite') ?? 1);
console.log(`Suche nach "${suchbegriff}", Seite ${seite}`);
Weiterleiten: assign() vs. replace()
const nachLoginWeiterleiten = (eingeloggt) => {
if (!eingeloggt) {
// Login-Seite soll im Verlauf bleiben -> assign
const ziel = new URL('/login', location.origin);
ziel.searchParams.set('zurueck', location.pathname);
location.assign(ziel);
} else {
// Zwischenseite ersetzen, damit "Zurück" nicht erneut hierher führt
location.replace('/dashboard');
}
};
nachLoginWeiterleiten(false);
Hash-Navigation ohne Neuladen
const zeigeAbschnitt = () => {
const id = location.hash.slice(1) || 'start';
console.log(`Aktiver Abschnitt: ${id}`);
};
window.addEventListener('hashchange', zeigeAbschnitt);
zeigeAbschnitt();
// Später, z. B. bei Klick auf einen Tab:
location.hash = 'einstellungen'; // kein Reload, löst hashchange aus
// Wichtig · Fallstricke
- Sicherheit / Open Redirect & XSS: Niemals ungeprüfte Nutzereingaben (z. B. einen
?redirect=-Parameter) anlocation.href,assign()oderreplace()übergeben. URLs mitjavascript:-Schema führen dabei Code aus (DOM-basiertes XSS). Ziel mitnew URL(wert, location.origin)parsen undprotocolsowieorigingegen eine Positivliste prüfen. - Werte aus
location.searchoderlocation.hashnie perinnerHTMLins DOM schreiben – stattdessentextContentverwenden. - Das Setzen von
pathname,searchusw. löst jeweils eine Navigation aus. Mehrere Änderungen daher zuerst in einemURL-Objekt vornehmen und dann einmallocation.hrefsetzen. - Bei Frames anderer Origin ist nur das Schreiben von
hrefbzw. der Aufruf vonreplace()/assign()erlaubt; Lesezugriffe werfen einenSecurityError. searchundhashliefern leere Strings, wenn kein Wert vorhanden ist – nicht"?"bzw."#". Die Werte sind prozentkodiert; ggf.decodeURIComponent()oderURLSearchParamsnutzen.location.reload(true)(erzwungenes Neuladen ohne Cache) ist nicht standardisiert und wird außerhalb von Firefox ignoriert.location.ancestorOriginswird von Firefox nicht unterstützt. Alle übrigen Bestandteile sind in allen Browsern verfügbar.- In Web Workern gibt es stattdessen die schreibgeschützte
WorkerLocation(self.location) ohne Navigationsmethoden.