Start · Sprachen · JavaScript · Referenz · String.prototype.link()

String.prototype.link()

Methode

Gibt einen String zurück, der den Ausgangstext in ein <code>&lt;a href="url"&gt;</code>-Element einbettet. Die Methode ist veraltet.

seit JavaScript ES2015 (Annex B, veraltet) – in allen Browsern und deprecated seit ja Kategorie: method-property

Signatur

String.prototype.link(url)

Beschreibung

link() gehört zu den sogenannten HTML-Wrapper-Methoden von String, zusammen mit anchor(), bold(), big() und weiteren. Die Methode erzeugt nur einen neuen String der Form <a href="url">text</a>. Sie legt kein DOM-Element an und verändert den ursprünglichen String nicht.

Die Methode stammt aus der Anfangszeit von JavaScript, als HTML oft per document.write() zusammengesetzt wurde. Heute steht sie nur noch in Annex B der ECMAScript-Spezifikation. Dort sind Altlasten für Web-Browser aufgeführt, und die Methode ist ausdrücklich als veraltet gekennzeichnet.

Intern ersetzt link() im Argument url nur das doppelte Anführungszeichen (") durch &quot;. Der Linktext selbst wird nicht maskiert. Zeichen wie <, > oder & landen also unverändert im Ergebnis. In neuem Code solltest du Links deshalb mit document.createElement("a") erzeugen, mit textContent befüllen und das Ziel über die Eigenschaft href setzen.

Parameter

Name Typ Default Beschreibung
$url Pflicht string Ziel des Links, wird als Wert des Attributs href eingesetzt. Andere Werte werden mit String() umgewandelt. Fehlt das Argument, entsteht href="undefined". Nur " wird zu &quot; maskiert.

Rückgabewert

Typ
string
Beschreibung
Ein neuer String der Form <a href="url">str</a>, wobei str der ursprüngliche String ist.

Beispiele

Einfacher Link-String

const text = "Zur Startseite";
const html = text.link("https://programmierung.net/");
console.log(html);
<a href="https://programmierung.net/">Zur Startseite</a>

Nur Anführungszeichen in der URL werden maskiert

const html = "Suche <neu>".link('https://example.com/?q="js"&page=2');
console.log(html);
// Der Linktext "<neu>" wird NICHT maskiert, "&" in der URL ebenfalls nicht
<a href="https://example.com/?q=&quot;js&quot;&page=2">Suche <neu></a>

Moderne, sichere Alternative per DOM

const createLink = (text, url) => {
  const a = document.createElement("a");
  a.href = url;          // Attribut wird korrekt gesetzt
  a.textContent = text;  // Text wird nie als HTML gedeutet
  return a;
};

const link = createLink("Dokumentation <v2>", "https://example.com/docs");
document.body.append(link);
console.log(link.outerHTML);
<a href="https://example.com/docs">Dokumentation &lt;v2&gt;</a>

// Wichtig · Fallstricke

  • Veraltet: link() steht nur im Annex B der Spezifikation. Die Methode wird aus Kompatibilitätsgründen weiter unterstützt, sollte in neuem Code aber nicht mehr verwendet werden. Linter wie ESLint mit passendem Plugin können vor solchen Methoden warnen.
  • XSS-Gefahr: Der Linktext wird ungefiltert übernommen. Wenn Nutzereingaben als Text dienen und das Ergebnis per innerHTML oder document.write() eingefügt wird, kann schädliches Markup wie <img onerror=…> ausgeführt werden.
  • Gefährliche URLs: Das URL-Schema wird nicht geprüft. Die Methode akzeptiert auch javascript:alert(1) als href. Prüfe deshalb Adressen aus fremden Quellen, zum Beispiel mit new URL() und einer Positivliste erlaubter Protokolle wie https:. Eine strikte Content Security Policy (CSP) kann zusätzlich schützen.
  • Außer " wird nichts maskiert, auch nicht &, < oder '.
  • Kompatibilität: in allen Browsern und in Node.js vorhanden. Aufrufe auf null oder undefined (etwa per call) werfen einen TypeError.