Start · Sprachen · JavaScript · Referenz · Element.insertAdjacentHTML()

Element.insertAdjacentHTML()

Methode

Die Methode <code>insertAdjacentHTML()</code> parst eine HTML- oder XML-Zeichenkette und fügt die resultierenden Knoten an einer angegebenen Position in den DOM-Baum ein.

Kategorie: web-api

Signatur

insertAdjacentHTML(position, input)

Beschreibung

Die Methode insertAdjacentHTML() der Schnittstelle Element parst die angegebene Eingabe als HTML oder XML und fügt die resultierenden Knoten an einer bestimmten Position in den DOM-Baum ein.

Die Methode insertAdjacentHTML() parst das Element, auf dem sie aufgerufen wird, nicht erneut und beschädigt daher nicht die bestehenden Elemente innerhalb dieses Elements. Dadurch entfällt der zusätzliche Serialisierungsschritt, was sie deutlich schneller macht als eine direkte Manipulation von innerHTML.

Wenn <p> das Element ist, lassen sich die möglichen Positionen für den eingefügten Inhalt "foo" wie folgt visualisieren:

Die Methode enthält keine spezielle Behandlung für <template>-Elemente. In den meisten Fällen sollten Entwickler insertAdjacentHTML() auf der content-Eigenschaft des Templates verwenden, anstatt die Kindknoten eines Template-Elements direkt zu manipulieren.

Sicherheitsüberlegungen

Die Methode führt keine Bereinigung durch, um XSS-unsichere Elemente wie <script> oder Event-Handler-Content-Attribute zu entfernen.

Wenn Sie HTML mit insertAdjacentHTML() in eine Seite einfügen, sollten Sie TrustedHTML-Objekte anstelle von Strings übergeben und Trusted Types mit der CSP-Direktive require-trusted-types-for erzwingen. Dies stellt sicher, dass die Eingabe durch eine Transformationsfunktion geleitet wird, die die Möglichkeit hat, die Eingabe zu bereinigen und potenziell gefährliches Markup zu entfernen, bevor es eingefügt wird.

Die Methode Element.insertAdjacentText() oder Node.textContent sollte verwendet werden, wenn Sie wissen, dass der vom Benutzer bereitgestellte Inhalt reiner Text sein soll. Dadurch wird die Eingabe als Rohtext eingefügt, anstatt sie als HTML zu parsen.

Parameter

Name Typ Default Beschreibung
$position Pflicht string Ein String, der die Position relativ zum Element angibt. Muss einer der folgenden Werte sein: "beforebegin" (vor dem Element; nur gültig, wenn das Element im DOM-Baum ist und ein Elternelement besitzt), "afterbegin" (innerhalb des Elements, vor dem ersten Kindknoten), "beforeend" (innerhalb des Elements, nach dem letzten Kindknoten) oder "afterend" (nach dem Element; nur gültig, wenn das Element im DOM-Baum ist und ein Elternelement besitzt).
$input Pflicht TrustedHTML | string Eine TrustedHTML-Instanz oder ein String, der das zu parsende HTML oder XML definiert.

Rückgabewert

Typ
undefined
Beschreibung
Keiner (undefined).

Beispiele

Trusted Types Tinyfill

if (typeof trustedTypes === "undefined")
  trustedTypes = { createPolicy: (n, rules) => rules };

Policy und TrustedHTML erzeugen

const policy = trustedTypes.createPolicy("some-content-policy", {
  createHTML(input) {
    return input; // Do not do this in your own code!
    // Instead do something like:
    // return DOMPurify.sanitize(input);
  },
});

const unsafeText = "<strong>inserted text</strong>";
const trustedHTML = policy.createHTML(unsafeText);

Einfügen an ausgewählter Position

const insert = document.querySelector("#insert");
insert.addEventListener("click", () => {
  const subject = document.querySelector("#subject");
  const positionSelect = document.querySelector("#position");
  subject.insertAdjacentHTML(positionSelect.value, trustedHTML);
});

const reset = document.querySelector("#reset");
reset.addEventListener("click", () => {
  document.location.reload();
});

// Wichtig · Fallstricke

Warnung: Diese Methode parst ihre Eingabe als HTML oder XML und schreibt das Ergebnis in den DOM. APIs wie diese werden als Injection Sinks bezeichnet und sind potenziell ein Vektor für Cross-Site-Scripting (XSS)-Angriffe, wenn die Eingabe ursprünglich von einem Angreifer stammt. Sie können das Risiko verringern, indem Sie TrustedHTML-Objekte anstelle von Strings zuweisen und Trusted Types über die CSP-Direktive require-trusted-types-for erzwingen. Diese Methode kann eine DOMException eines der folgenden Typen auslösen: NoModificationAllowedError (wenn position "beforebegin" oder "afterend" ist und das Element entweder kein Elternelement hat oder sein Elternelement das Document-Objekt ist); SyntaxError (wenn position keiner der vier aufgeführten Werte ist oder die Eingabe kein wohlgeformtes XML ist); TypeError (wenn die Eigenschaft auf einen String gesetzt wird, während Trusted Types durch eine CSP erzwungen werden und keine Standardrichtlinie definiert ist).