Signatur
Beschreibung
HTMLBaseElement ist die DOM-Schnittstelle des <base>-Elements. Sie erbt alle Eigenschaften und Methoden von HTMLElement und ergänzt sie um zwei eigene Eigenschaften: href (die Basis-URL) und target (der Standard-Browsing-Kontext für Links und Formulare).
Das <base>-Element legt fest, wie relative URLs im Dokument aufgelöst werden: in <a href>, <img src>, <link href>, <form action> und auch in Skript-APIs wie fetch() oder new URL(relativ, document.baseURI). Das ist praktisch bei Single-Page-Anwendungen, die unter einem Unterpfad laufen (z. B. /app/), oder bei statischen HTML-Exporten, deren Ressourcen auf einem CDN liegen.
Die aktuell gültige Basis-URL liest man am einfachsten über document.baseURI aus. Die Eigenschaft HTMLBaseElement.href liefert beim Lesen immer die aufgelöste, absolute URL, während getAttribute('href') den Rohwert aus dem HTML-Quelltext zurückgibt.
Pro Dokument ist nur ein <base>-Element vorgesehen; es muss im <head> stehen, und zwar vor allen Elementen mit URL-Attributen. Existieren mehrere, wird nur das erste mit href-Attribut für die Basis-URL und das erste mit target-Attribut für das Linkziel verwendet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $href | string | URL des Dokuments | Eigenschaft: spiegelt das href-Attribut. Beim Lesen die absolute, aufgelöste Basis-URL; beim Setzen wird das Attribut geändert und alle relativen URLs werden neu aufgelöst. |
| $target | string | "" | Eigenschaft: spiegelt das target-Attribut – Standardziel für Links und Formulare ohne eigenes target, z. B. _blank, _self, _parent, _top oder ein Frame-Name. |
Rückgabewert
document.querySelector('base') oder document.createElement('base'). Es gibt keinen direkt aufrufbaren Konstruktor.Beispiele
Vorhandenes base-Element auslesen
// HTML: <head><base href="/app/" target="_blank"></head>
const base = document.querySelector('base');
if (base instanceof HTMLBaseElement) {
console.log(base.getAttribute('href')); // Rohwert
console.log(base.href); // aufgelöste URL
console.log(base.target);
console.log(document.baseURI);
}
base-Element dynamisch erzeugen (z. B. für SPA unter Unterpfad)
const setBaseUrl = (url) => {
let base = document.head.querySelector('base');
if (!base) {
base = document.createElement('base');
// möglichst früh im <head> einfügen
document.head.prepend(base);
}
base.href = url;
return base;
};
setBaseUrl('https://cdn.example.com/assets/');
console.log(document.baseURI);
const img = document.createElement('img');
img.setAttribute('src', 'logo.png');
console.log(img.src);
Relative URLs in Skripten gegen die Basis-URL auflösen
// Mit <base href="https://api.example.com/v2/">
const resolve = (path) => new URL(path, document.baseURI).href;
console.log(resolve('users'));
console.log(resolve('../v1/status'));
console.log(resolve('/health'));
// fetch() löst relative URLs ebenfalls gegen document.baseURI auf
const loadUsers = async () => {
const res = await fetch('users');
return res.json();
};
Standard-Linkziel umschalten
const base = document.querySelector('base') ?? document.head.appendChild(document.createElement('base'));
// Alle Links ohne eigenes target öffnen sich nun in einem neuen Tab
base.target = '_blank';
console.log(base.target);
// Zurücksetzen
base.removeAttribute('target');
console.log(JSON.stringify(base.target));
// Wichtig · Fallstricke
- Abschließender Schrägstrich:
<base href=\"/app\">und<base href=\"/app/\">verhalten sich unterschiedlich. Ohne Schrägstrich wirdappals Dateiname behandelt, sodasslogo.pngzu/logo.pngaufgelöst wird statt zu/app/logo.png. - Sprungmarken: Auch Anker wie
<a href=\"#abschnitt\">werden gegen die Basis-URL aufgelöst und können dadurch auf eine andere Seite führen. In SPAs ist das eine häufige Fehlerquelle; SVG-Verweise wieurl(#id)können ebenfalls brechen. - Reihenfolge: URLs, die vor dem
<base>-Element geparst werden, sind schon mit der alten Basis aufgelöst. Ändert manhrefnachträglich, werden bereits geladene Ressourcen nicht erneut geladen. - Sicherheit: Kann ein Angreifer ein
<base>-Element einschleusen (HTML-Injection), leitet er alle relativen Skript- und Formular-URLs auf seinen Server um („Base-Tag-Hijacking“). Deshalb sollte eine Content Security Policybase-uri 'self'oderbase-uri 'none'setzen. Außerdem sinddata:- undjavascript:-URLs als Basis-URL nicht erlaubt. - Mehrere Elemente: Nur das erste
<base>mithrefzählt; weitere werden ignoriert. - Browser-Unterstützung: Wird seit Langem von allen Browsern unterstützt (Baseline). Früher gab es im IE Unterschiede bei der Auflösung relativer
href-Werte im<base>selbst.