Start · Sprachen · JavaScript · Referenz · MathMLAnchorElement.hostname

MathMLAnchorElement.hostname

Eigenschaft

Liest oder setzt den Hostnamen (Domain oder IP-Adresse ohne Port) der URL im <code>href</code>-Attribut eines MathML-<code>&lt;a&gt;</code>-Elements.

seit JavaScript Experimentell: bislang nur in einzelnen Browsern ( Kategorie: webapi

Signatur

MathMLAnchorElement.hostname

Beschreibung

Die Eigenschaft hostname des Interfaces MathMLAnchorElement liefert den Hostnamen der URL, die im href-Attribut eines MathML-<a>-Elements steht. Das ist entweder ein Domainname (z. B. example.com) oder eine IP-Adresse (z. B. 192.168.0.1 oder [::1]). Anders als bei host ist die Portnummer nicht enthalten.

Sie funktioniert genauso wie HTMLAnchorElement.hostname. Damit kannst du Links in mathematischen Formeln auswerten, zum Beispiel um externe Ziele zu erkennen, Links auf einen anderen Server umzuschreiben oder sie für die Analyse zu filtern.

Die Eigenschaft lässt sich auch setzen. Dann schreibt der Browser das href-Attribut mit dem neuen Hostnamen neu; Protokoll, Port, Pfad, Suchparameter und Fragment bleiben unverändert. Ist href leer oder keine gültige URL, wird der leere String "" zurückgegeben und eine Zuweisung hat keine Wirkung.

Parameter

Name Typ Default Beschreibung
$value string Nur beim Setzen: der neue Hostname (Domain oder IP-Adresse, ohne Port). Er ersetzt den Hostnamen in href.

Rückgabewert

Typ
string
Beschreibung
Der Hostname der URL aus href ohne Port, bei internationalen Domains in Punycode-Form. Bei fehlender oder ungültiger URL ist es der leere String.

Beispiele

Hostnamen eines MathML-Links auslesen

const MATHML_NS = 'http://www.w3.org/1998/Math/MathML';
const link = document.createElementNS(MATHML_NS, 'a');
link.setAttribute('href', 'https://mathe.example.com:8443/formeln/pythagoras?lang=de#beweis');

console.log(link.hostname); // ohne Port
console.log(link.host);     // mit Port
mathe.example.com mathe.example.com:8443

Externe Links in Formeln markieren (mit Feature-Erkennung)

const getHostname = (el) =>
  'hostname' in el
    ? el.hostname
    : new URL(el.getAttribute('href'), document.baseURI).hostname; // Ersatzweg

document.querySelectorAll('math a[href]').forEach((el) => {
  const extern = getHostname(el) !== location.hostname;
  el.setAttribute('data-extern', String(extern));
  if (extern) console.log('Externer Link:', getHostname(el));
});
Externer Link: de.wikipedia.org

Hostnamen umschreiben (z. B. auf einen Staging-Server)

const link = document.createElementNS('http://www.w3.org/1998/Math/MathML', 'a');
link.setAttribute('href', 'https://www.example.com:8080/doku/integral');

link.hostname = 'staging.example.com';
console.log(link.getAttribute('href'));
https://staging.example.com:8080/doku/integral

// Wichtig · Fallstricke

  • Browser-Unterstützung: MathMLAnchorElement ist neu und noch experimentell. Prüfe vorher mit 'MathMLAnchorElement' in window oder 'hostname' in element, ob es verfügbar ist. Als Ersatz dient new URL(el.getAttribute('href'), document.baseURI).hostname.
  • Das Element musst du mit document.createElementNS() und dem MathML-Namensraum erzeugen. document.createElement('a') erzeugt dagegen ein HTMLAnchorElement.
  • hostname enthält keinen Port. Mit Port bekommst du den Wert über host.
  • Internationale Domains werden in Punycode zurückgegeben (z. B. xn--mnchen-3ya.de für münchen.de). IPv6-Adressen stehen in eckigen Klammern.
  • Relative href-Werte werden gegen die Basis-URL des Dokuments aufgelöst. Sie liefern also den Hostnamen der aktuellen Seite.
  • Sicherheit: Einen Vergleich des Hostnamens solltest du nur als Hinweis nutzen, nicht als Sicherheitsprüfung. Für echte Prüfungen der Herkunft eignet sich origin besser.