Signatur
Beschreibung
Die Eigenschaft protocol der Schnittstelle MathMLAnchorElement gibt das Schema der verlinkten URL als String zurück, zum Beispiel "https:", "mailto:" oder "ftp:". Der Doppelpunkt am Ende gehört immer dazu. Sie funktioniert genauso wie HTMLAnchorElement.protocol, nur für Links in MathML-Formeln (<a> im MathML-Namensraum http://www.w3.org/1998/Math/MathML).
Die Eigenschaft ist lesbar und schreibbar. Wenn du einen neuen Wert zuweist, ändert der Browser nur das Schema der URL und schreibt das Ergebnis zurück in das href-Attribut. Host, Pfad, Suchparameter und Fragment bleiben gleich. Den abschließenden Doppelpunkt kannst du beim Setzen weglassen. Der Browser ergänzt ihn selbst.
Typische Anwendungen:
- Verweise in Formeln prüfen, zum Beispiel nur
https:-Links zulassen. - Unsichere
http:-Links nachträglich aufhttps:umstellen. - Links nach Art sortieren oder anders gestalten, etwa
mailto:oder externe Links.
Fehlt das href-Attribut oder lässt sich sein Wert nicht als URL lesen, liefert die Eigenschaft einen leeren String "". Relative URLs werden vorher mit der Basis-URL des Dokuments aufgelöst. Deshalb liefert ein relativer Link normalerweise das Protokoll der aktuellen Seite.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $wert (beim Setzen) | string | Neues Schema, z. B. "https" oder "https:". Ungültige Werte und manche Wechsel zwischen besonderen Schemata (z. B. von https: zu mailto:) werden ohne Fehlermeldung ignoriert. |
Rückgabewert
href-URL mit abschließendem ":", z. B. "https:". Ohne gültiges href ein leerer String.Beispiele
Protokoll eines MathML-Links auslesen
// HTML: <math><a href="https://de.wikipedia.org/wiki/Pi"><mi>π</mi></a></math>
const link = document.querySelector('math a');
if (link && 'protocol' in link) {
console.log(link.protocol);
} else {
console.log('MathMLAnchorElement.protocol wird nicht unterstützt');
}
MathML-Link per Skript erzeugen und Protokoll prüfen
const MATHML_NS = 'http://www.w3.org/1998/Math/MathML';
const math = document.createElementNS(MATHML_NS, 'math');
const a = document.createElementNS(MATHML_NS, 'a');
const mi = document.createElementNS(MATHML_NS, 'mi');
mi.textContent = 'e';
a.setAttribute('href', 'mailto:autor@example.org');
a.append(mi);
math.append(a);
document.body.append(math);
console.log(a.protocol);
Alle http-Links in Formeln auf https umstellen
const upgradeMathLinks = () => {
for (const link of document.querySelectorAll('math a[href]')) {
if (link.protocol === 'http:') {
link.protocol = 'https'; // Doppelpunkt wird automatisch ergänzt
console.log('Umgestellt:', link.getAttribute('href'));
}
}
};
upgradeMathLinks();
Nur sichere Schemata erlauben
const ERLAUBT = new Set(['https:', 'mailto:']);
document.querySelectorAll('math a[href]').forEach((link) => {
if (!ERLAUBT.has(link.protocol)) {
console.warn('Entferne unsicheren Link:', link.getAttribute('href'));
link.removeAttribute('href');
}
});
// Wichtig · Fallstricke
Browser-Unterstützung: MathMLAnchorElement ist neu und experimentell. Viele Browser stellen MathML-<a>-Elemente bisher nur als allgemeines MathMLElement ohne URL-Eigenschaften bereit. Prüfe die Unterstützung vorher, etwa mit 'protocol' in element. Falls sie fehlt, kannst du als Ausweg new URL(element.getAttribute('href'), document.baseURI).protocol verwenden.
- Der Rückgabewert endet immer mit
":". Vergleiche also mit"https:", nicht mit"https". - Ein ungültiger Wert beim Setzen löst keinen Fehler aus. Die Zuweisung wird einfach ignoriert.
- Ein Wechsel zwischen besonderen Schemata (
http:,https:,ftp:,ws:,wss:,file:) und anderen Schemata ist laut URL-Standard nicht möglich. - Sicherheit: Links wie
javascript:in Formeln von Nutzern können XSS ermöglichen. Filtereprotocolmit einer Liste erlaubter Schemata, nicht mit einer Liste verbotener.