Signatur
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
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
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));
});
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'));
// Wichtig · Fallstricke
- Browser-Unterstützung:
MathMLAnchorElementist neu und noch experimentell. Prüfe vorher mit'MathMLAnchorElement' in windowoder'hostname' in element, ob es verfügbar ist. Als Ersatz dientnew URL(el.getAttribute('href'), document.baseURI).hostname. - Das Element musst du mit
document.createElementNS()und dem MathML-Namensraum erzeugen.document.createElement('a')erzeugt dagegen einHTMLAnchorElement. hostnameenthält keinen Port. Mit Port bekommst du den Wert überhost.- Internationale Domains werden in Punycode zurückgegeben (z. B.
xn--mnchen-3ya.defürmü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
originbesser.