Start · Sprachen · JavaScript · Referenz · MathMLAnchorElement.origin

MathMLAnchorElement.origin

Eigenschaft

Gibt schreibgeschützt den serialisierten Ursprung (Schema, Host, Port) der URL im <code>href</code>-Attribut eines MathML-<code>&lt;a&gt;</code>-Elements als String zurück.

seit JavaScript Experimentell: bisher nur in wenigen Browsern (Sta Kategorie: webapi

Signatur

get MathMLAnchorElement.origin

Beschreibung

Die schreibgeschützte Eigenschaft origin des Interfaces MathMLAnchorElement liefert den Ursprung (englisch „origin“) der URL, die im href-Attribut eines MathML-Links (<a> im MathML-Namensraum) steht. Der Ursprung besteht aus Schema, Hostname und – falls vom Standard abweichend – Port, etwa https://example.com oder http://localhost:8080.

Die Eigenschaft funktioniert genauso wie HTMLAnchorElement.origin und URL.prototype.origin. Relative Angaben in href werden gegen die Basis-URL des Dokuments aufgelöst, sodass du immer einen vollständigen Ursprung erhältst. Pfad, Query-String und Fragment sind nicht enthalten.

Brauchbar ist das vor allem, wenn du Links in mathematischen Formeln prüfen willst. Du kannst zum Beispiel erkennen, ob ein Link aus einer Formel auf eine externe Seite führt, und ihn dann kennzeichnen oder mit rel="noopener"-ähnlicher Logik behandeln. Oder du gleichst Links mit einer Liste erlaubter Ursprünge ab.

Für URLs ohne eigenen Ursprung, zum Beispiel mit data:, javascript: oder about:blank, und für ungültige URLs liefert die Eigenschaft den String "null". Fehlt das href-Attribut ganz, ist das Ergebnis ein leerer String.

Rückgabewert

Typ
string
Beschreibung
Der serialisierte Ursprung der href-URL, z. B. "https://example.com". Bei opaken Ursprüngen oder ungültigen URLs kommt "null" zurück, ohne href ein leerer String.

Beispiele

Ursprung eines MathML-Links auslesen

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

// MathML-<a>-Element erzeugen und URL setzen
const link = document.createElementNS(MATHML_NS, 'a');
link.setAttribute('href', 'https://de.wikipedia.org:443/wiki/Pythagoras?x=1#beweis');

if ('origin' in link) {
  console.log(link.origin);
} else {
  console.log('MathMLAnchorElement.origin wird nicht unterstützt');
}
https://de.wikipedia.org

Externe Links in Formeln markieren

// Alle MathML-Links im Dokument durchgehen
const mathLinks = document.querySelectorAll('math a[href]');

for (const link of mathLinks) {
  // Fallback für Browser ohne Unterstützung: URL-Objekt verwenden
  const origin = link.origin ?? new URL(link.getAttribute('href'), document.baseURI).origin;

  if (origin !== location.origin) {
    link.classList.add('extern');
    link.setAttribute('title', `Externer Link zu ${origin}`);
  }
}

Relative URLs, Ports und opake Ursprünge

const MATHML_NS = 'http://www.w3.org/1998/Math/MathML';
const a = document.createElementNS(MATHML_NS, 'a');

// Angenommen, die Seite läuft unter https://programmierung.net
a.setAttribute('href', '/formeln/binomial');
console.log(a.origin);

a.setAttribute('href', 'http://localhost:8080/test');
console.log(a.origin);

a.setAttribute('href', 'data:text/plain,Hallo');
console.log(a.origin);
https://programmierung.net http://localhost:8080 null

// Wichtig · Fallstricke

  • Browser-Unterstützung: MathMLAnchorElement ist neu und wird bisher kaum unterstützt. In vielen Browsern ist ein MathML-<a> nur ein normales MathMLElement ohne origin, die Eigenschaft ist dann undefined. Prüfe das vorher mit 'origin' in element und nimm als Ersatz new URL(href, document.baseURI).origin.
  • Schreibgeschützt: Eine Zuweisung an origin hat keine Wirkung und wirft im Strict Mode einen Fehler. Wenn du den Link ändern willst, setze das Attribut href neu.
  • Der String "null": Bei data:-, javascript:- oder ungültigen URLs ist das Ergebnis der String "null", nicht der Wert null. Vergleiche also mit === 'null'.
  • Standardports: Standardports (443 bei https, 80 bei http) tauchen im Ergebnis nicht auf.
  • Sicherheit: Ein Vergleich über origin ist zuverlässiger als ein Textvergleich mit startsWith() auf href. Ein Präfix wie https://example.com.evil.net würde beim Textvergleich fälschlich als passend durchgehen. Prüfe erlaubte Ziele immer über den exakten Ursprung.