Start · Sprachen · JavaScript · Referenz · MathMLAnchorElement.host

MathMLAnchorElement.host

Eigenschaft

Liest oder setzt den Host-Teil (<code>hostname</code> plus optional <code>:port</code>) der URL im <code>href</code> eines MathML-<code>&lt;a&gt;</code>-Elements.

seit JavaScript Experimentell: bisher kaum Browser-Unterstützung Kategorie: webapi

Signatur

MathMLAnchorElement.host

Beschreibung

Die Eigenschaft host der Schnittstelle MathMLAnchorElement ist ein String mit dem Host-Teil der Link-URL. Er besteht aus dem hostname und, wenn die URL einen Port hat, einem Doppelpunkt gefolgt vom port, also zum Beispiel "example.com:8080". Hat die URL keinen Host (etwa bei mailto:- oder data:-URLs), ist der Wert ein leerer String.

MathMLAnchorElement steht für das Element <a> im MathML-Namensraum. Damit lassen sich Formelteile direkt verlinken. Die Eigenschaft verhält sich genauso wie HTMLAnchorElement.host und URL.host: Sie wertet das Attribut href aus, und zwar aufgelöst gegen die Basis-URL des Dokuments.

Die Eigenschaft ist les- und schreibbar. Wenn du einen neuen Wert zuweist, wird der Host in der URL ersetzt und das Attribut href sofort aktualisiert. Pfad, Suchparameter und Fragment bleiben dabei erhalten. Nützlich ist das zum Beispiel, wenn Links in mathematischen Inhalten auf eine andere Umgebung (Staging oder Produktion) umgestellt oder externe Links erkannt werden sollen.

Ist der Port der Standard-Port des Schemas (80 bei http, 443 bei https), wird er nicht in host aufgenommen.

Parameter

Name Typ Default Beschreibung
$value string Nur beim Setzen: neuer Host, optional mit Port, z. B. "cdn.example.org:8443". Ungültige Werte werden stillschweigend ignoriert.

Rückgabewert

Typ
string
Beschreibung
Der Host der aufgelösten href-URL (hostname bzw. hostname:port). Ein leerer String, wenn die URL keinen Host hat oder kein gültiges href gesetzt ist.

Beispiele

Host eines MathML-Links auslesen (mit Fallback)

const MATHML_NS = "http://www.w3.org/1998/Math/MathML";
const link = document.createElementNS(MATHML_NS, "a");
link.setAttribute("href", "https://example.com:8080/formeln/euler?x=1#def");

// Unterstützung prüfen, sonst mit URL auswerten
const host = "host" in link
  ? link.host
  : new URL(link.getAttribute("href"), document.baseURI).host;

console.log(host);
example.com:8080

Standard-Port wird weggelassen

const link = document.createElementNS("http://www.w3.org/1998/Math/MathML", "a");
link.setAttribute("href", "https://example.com:443/pfad");

const host = link.host ?? new URL(link.getAttribute("href")).host;
console.log(host);
example.com

Externe Links in Formeln markieren

const MATHML_NS = "http://www.w3.org/1998/Math/MathML";

const getHost = (a) =>
  typeof a.host === "string"
    ? a.host
    : new URL(a.getAttribute("href") ?? "", document.baseURI).host;

for (const a of document.getElementsByTagNameNS(MATHML_NS, "a")) {
  if (a.hasAttribute("href") && getHost(a) !== location.host) {
    a.setAttribute("data-extern", "true");
  }
}

Host umschreiben (Staging → Produktion)

const link = document.createElementNS("http://www.w3.org/1998/Math/MathML", "a");
link.setAttribute("href", "https://staging.example.com:8443/doku/integral#satz");

if ("host" in link) {
  link.host = "www.example.com";
} else {
  const url = new URL(link.getAttribute("href"));
  url.host = "www.example.com";
  link.setAttribute("href", url.href);
}

console.log(link.getAttribute("href"));
https://www.example.com:8443/doku/integral#satz

// Wichtig · Fallstricke

  • Kompatibilität: MathMLAnchorElement ist neu bzw. experimentell und wird von den meisten Browsern noch nicht unterstützt. Dort ist ein MathML-<a> nur ein allgemeines MathMLElement ohne host. Prüfe deshalb vorher mit "host" in element und nutze als Ausweichlösung new URL(element.getAttribute("href"), document.baseURI).host.
  • Port beim Setzen: Enthält der neue Wert keinen Port, bleibt ein vorhandener Port in der URL erhalten, siehe letztes Beispiel. Soll der Port entfernt werden, setze zusätzlich port = "".
  • host enthält den Port, hostname dagegen nie. Für Vergleiche mit location.host sollte man immer dieselbe Variante nutzen.
  • Internationalisierte Domainnamen werden in Punycode zurückgegeben (z. B. xn--mnchen-3ya.de).
  • Relative href-Werte werden gegen die Basis-URL des Dokuments aufgelöst. host liefert dann den Host des Dokuments und keinen leeren String.