Signatur
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
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');
}
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);
// Wichtig · Fallstricke
- Browser-Unterstützung:
MathMLAnchorElementist neu und wird bisher kaum unterstützt. In vielen Browsern ist ein MathML-<a>nur ein normalesMathMLElementohneorigin, die Eigenschaft ist dannundefined. Prüfe das vorher mit'origin' in elementund nimm als Ersatznew URL(href, document.baseURI).origin. - Schreibgeschützt: Eine Zuweisung an
originhat keine Wirkung und wirft im Strict Mode einen Fehler. Wenn du den Link ändern willst, setze das Attributhrefneu. - Der String
"null": Beidata:-,javascript:- oder ungültigen URLs ist das Ergebnis der String"null", nicht der Wertnull. Vergleiche also mit=== 'null'. - Standardports: Standardports (443 bei https, 80 bei http) tauchen im Ergebnis nicht auf.
- Sicherheit: Ein Vergleich über
originist zuverlässiger als ein Textvergleich mitstartsWith()aufhref. Ein Präfix wiehttps://example.com.evil.netwürde beim Textvergleich fälschlich als passend durchgehen. Prüfe erlaubte Ziele immer über den exakten Ursprung.