Start · Sprachen · JavaScript · Referenz · HTMLBaseElement.href

HTMLBaseElement.href

Eigenschaft

Liest oder setzt das <code>href</code>-Attribut eines <code>&lt;base&gt;</code>-Elements, also die Basis-URL, gegen die alle relativen URLs im Dokument aufgelöst werden.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

HTMLBaseElement.href

Beschreibung

Die Eigenschaft href des HTMLBaseElement-Interfaces spiegelt das gleichnamige HTML-Attribut des <base>-Elements wider. Der Wert legt fest, gegen welche Basis-URL relative Adressen in <a href>, <img src>, <link href>, <form action> und ähnlichen Attributen aufgelöst werden.

Beim Lesen gibt der Browser nicht den rohen Attributwert zurück, sondern eine vollständig aufgelöste, absolute URL. Ein relativer Attributwert wie /docs/ wird dabei gegen die Dokument-URL aufgelöst. Fehlt das Attribut, erhält man die URL des Dokuments. Den unveränderten Attributwert bekommt man mit getAttribute("href").

Beim Schreiben wird das href-Attribut gesetzt. Ist es das erste <base>-Element mit href im Dokument, ändert sich damit sofort document.baseURI. Alle danach aufgelösten relativen URLs, etwa beim Lesen von anchor.href oder beim Klick auf einen Link, verwenden die neue Basis.

Typische Einsatzfälle sind Single-Page-Apps unter einem Unterpfad (z. B. /app/), per JavaScript erzeugte Vorschauen in iframes oder HTML-Schnipsel, die aus einer anderen Quelle geladen werden und deren relative Pfade richtig aufgelöst werden sollen.

Parameter

Name Typ Default Beschreibung
$value string Nur beim Setzen: neue Basis-URL, absolut oder relativ. Relative Werte werden gegen die Dokument-URL aufgelöst.

Rückgabewert

Typ
string
Beschreibung
Die absolut aufgelöste Basis-URL. Fehlt das href-Attribut, ist es die URL des Dokuments.

Beispiele

Basis-URL auslesen: aufgelöster Wert und Rohwert

// HTML: <base href="/static/"> auf https://example.com/shop/index.html
const base = document.querySelector("base");

console.log(base.href);                 // aufgelöste, absolute URL
console.log(base.getAttribute("href")); // Rohwert aus dem Attribut
console.log(document.baseURI);
https://example.com/static/ /static/ https://example.com/static/

Basis-URL zur Laufzeit setzen (z. B. SPA unter Unterpfad)

const ensureBase = (url) => {
  let base = document.head.querySelector("base[href]");
  if (!base) {
    base = document.createElement("base");
    document.head.prepend(base); // möglichst früh im <head> einfügen
  }
  base.href = url;
  return base.href;
};

console.log(ensureBase("https://cdn.example.com/app/v2/"));

const link = document.createElement("a");
link.setAttribute("href", "assets/logo.svg");
console.log(link.href);
https://cdn.example.com/app/v2/ https://cdn.example.com/app/v2/assets/logo.svg

HTML-Vorschau in einem iframe mit richtigen relativen Pfaden

const showPreview = (html, sourceUrl) => {
  const iframe = document.querySelector("#preview");
  const doc = iframe.contentDocument;
  doc.open();
  doc.write("<!doctype html><head></head><body></body>");
  doc.close();

  const base = doc.createElement("base");
  base.href = sourceUrl; // relative Bilder/Links zeigen auf die Originalquelle
  doc.head.append(base);
  doc.body.innerHTML = html; // nur vertrauenswürdiges HTML verwenden!

  console.log(doc.baseURI);
};

showPreview('<img src="img/foto.jpg">', "https://blog.example.org/posts/42/");
https://blog.example.org/posts/42/

// Wichtig · Fallstricke

  • Nur das erste <base href> zählt: Weitere <base>-Elemente mit href werden bei der Bestimmung von document.baseURI ignoriert. Ihr href liefert trotzdem eine aufgelöste URL.
  • Getter ≠ Attribut: base.href gibt immer eine absolute URL zurück. Wer den Originalwert braucht, verwendet getAttribute("href").
  • Kein Nachladen: Wird die Basis nachträglich geändert, lädt der Browser bereits geladene Ressourcen (Bilder, Skripte, Stylesheets) nicht neu. Die neue Basis gilt nur für URLs, die danach aufgelöst werden.
  • Anker-Links: Mit gesetzter Basis wird auch <a href="#abschnitt"> gegen die Basis aufgelöst. Der Link kann dann auf eine andere Seite führen statt zum Abschnitt auf der aktuellen Seite. Ein häufiger Fehler in SPAs.
  • Sicherheit: Kann ein Angreifer ein <base>-Element einschleusen (z. B. per innerHTML-Injektion), werden alle relativen Skript- und Formular-URLs auf seinen Server umgeleitet. Mit der CSP-Direktive base-uri 'self' (oder 'none') lässt sich das verhindern.
  • Kompatibilität: Wird in allen modernen Browsern unterstützt. Das Auflösen zu einer absoluten URL beim Lesen ist in allen aktuellen Engines umgesetzt.