A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://developer.mozilla.org/de/docs/Web/API/Element/outerHTML below:

Element: outerHTML-Eigenschaft - Web-APIs | MDN

Element: outerHTML-Eigenschaft

Baseline Widely available

Das outerHTML-Attribut der Element-Schnittstelle erhält oder setzt das HTML- oder XML-Markup des Elements und seiner Nachkommen, wobei eventuell vorhandene Shadow-Roots in beiden Fällen weggelassen werden.

Um den Inhalt eines Elements zu erhalten oder zu setzen, verwenden Sie stattdessen die innerHTML-Eigenschaft.

Wert

Das Abrufen der Eigenschaft gibt eine Zeichenfolge zurück, die eine HTML-Serialisierung des element und seiner Nachkommen enthält.

Das Setzen der Eigenschaft akzeptiert entweder ein TrustedHTML-Objekt oder eine Zeichenfolge. Die Eingabe wird als HTML analysiert und ersetzt das Element und alle seine Nachkommen mit dem Ergebnis. Wenn der Wert auf null gesetzt wird, wird dieser null-Wert in die leere Zeichenfolge ("") umgewandelt, sodass element.outerHTML = null gleichbedeutend mit element.outerHTML = "" ist.

Ausnahmen
NoModificationAllowedError DOMException

Auslösen, wenn versucht wird, outerHTML bei einem Element zu setzen, das ein direktes Kind eines Document ist, wie z. B. Document.documentElement.

SyntaxError DOMException

Auslösen, wenn outerHTML mit einer XML-Eingabe gesetzt wird, die nicht wohlgeformt ist.

TypeError

Auslösen, wenn die Eigenschaft auf eine Zeichenfolge gesetzt wird, während trusted types durch eine CSP durchgesetzt werden und keine Standardrichtlinie definiert ist.

Beschreibung

outerHTML erhält eine Serialisierung des Elements oder setzt HTML oder XML, das analysiert werden soll, um es innerhalb des Elternelements zu ersetzen.

Wenn das Element keinen Elterknoten hat, wird das Setzen seiner outerHTML-Eigenschaft es oder seine Nachkommen nicht verändern. Zum Beispiel:

const div = document.createElement("div");
div.outerHTML = '<div class="test">test</div>';
console.log(div.outerHTML); // output: "<div></div>"

Auch wenn das Element im Dokument ersetzt wird, hält die Variable, deren outerHTML-Eigenschaft gesetzt wurde, weiterhin eine Referenz auf das ursprüngliche Element:

const p = document.querySelector("p");
console.log(p.nodeName); // shows: "P"
p.outerHTML = "<div>This div replaced a paragraph.</div>";
console.log(p.nodeName); // still "P";
Entwichene Attributwerte

Der zurückgegebene Wert wird einige Werte in HTML-Attributen escapen. Hier sehen wir, dass das &-Zeichen escapt wird:

const anchor = document.createElement("a");
anchor.href = "https://developer.mozilla.org?a=b&c=d";
console.log(anchor.outerHTML); // output: "<a href='https://developer.mozilla.org?a=b&amp;c=d'></a>"

Einige Browser serialisieren auch die < und > Zeichen als &lt; und &gt;, wenn sie in Attributwerten auftreten (siehe Browser-Kompatibilität). Dies dient dazu, eine potenzielle Sicherheitslücke (Mutation XSS) zu verhindern, bei der ein Angreifer Eingaben gestalten kann, um eine Sanitisierungsfunktion zu umgehen, was einen Cross-Site-Scripting (XSS)-Angriff ermöglicht.

Überlegungen zum Shadow DOM

Die Serialisierung des DOM-Baums, die aus der Eigenschaft gelesen wird, schließt keine Shadow Roots ein. Wenn Sie eine HTML-Serialisierung eines Elements erhalten möchten, die Shadow Roots einschließt, müssen Sie stattdessen die Element.getHTML()-Methode verwenden. Beachten Sie, dass dies den Inhalt des Elements erhält.

In ähnlicher Weise werden beim Setzen des Inhalts eines Elements mit outerHTML die HTML-Eingaben in DOM-Elemente geparst, die keine Shadow Roots enthalten. So wird beispielsweise <template> als HTMLTemplateElement geparst, unabhängig davon, ob das shadowrootmode Attribut angegeben ist oder nicht. Wenn Sie den Inhalt eines Elements aus einer HTML-Eingabe setzen möchten, die deklarative Shadow Roots enthält, müssen Sie stattdessen Element.setHTMLUnsafe() oder ShadowRoot.setHTMLUnsafe() verwenden.

Sicherheitsüberlegungen

Die outerHTML-Eigenschaft ist eine potenzielle Angriffsfläche für Cross-Site-Scripting (XSS)-Angriffe, da sie verwendet werden kann, um potenziell unsichere, vom Benutzer bereitgestellte Zeichenfolgen in das DOM einzufügen. Obwohl die Eigenschaft das Ausführen von <script>-Elementen verhindert, wenn sie eingefügt werden, ist sie für viele andere Möglichkeiten anfällig, bei denen Angreifer HTML gestalten können, um bösartigen JavaScript-Code auszuführen. Zum Beispiel würde das folgende Beispiel den Code im error-Ereignishandler ausführen, weil der <img> src-Wert keine gültige Bild-URL ist:

const name = "<img src='x' onerror='alert(1)'>";
element.outerHTML = name; // shows the alert

Sie können diese Probleme mindern, indem Sie immer TrustedHTML-Objekte anstelle von Zeichenfolgen zuweisen und vertrauenswürdige Typen durchsetzen mit der require-trusted-types-for-CSP-Direktive. Dies stellt sicher, dass die Eingabe durch eine Transformationsfunktion geleitet wird, die die Möglichkeit hat, die Eingabe zu sanitisieren, um potenziell gefährliches Markup zu entfernen, bevor es eingefügt wird.

Beispiele Die Serialisierung eines Elements erhalten

Das Lesen von outerHTML veranlasst den Benutzeragenten, das Element zu serialisieren.

Angesichts des folgenden HTMLs:

<div id="example">
  <p>Content</p>
  <p>Further Elaborated</p>
</div>

Sie können das Markup für das <div> wie folgt abrufen und protokollieren:

const myElement = document.querySelector("#example");
const contents = myElement.outerHTML;
console.log(contents);
// '<div id="example">\n  <p>Content</p>\n  <p>Further Elaborated</p>\n</div>'
Das Element ersetzen

In diesem Beispiel ersetzen wir ein Element im DOM, indem wir HTML der outerHTML-Eigenschaft des Elements zuweisen. Um das Risiko von XSS zu mindern, erstellen wir zuerst ein TrustedHTML-Objekt aus der Zeichenfolge, die das HTML enthält, und weisen dann dieses Objekt der outerHTML zu.

Vertrauenswürdige Typen werden noch nicht von allen Browsern unterstützt, daher definieren wir zuerst das Trusted Types Tinyfill. Dies fungiert als transparenter Ersatz für die Trusted Types JavaScript-API:

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

Als nächstes erstellen wir eine TrustedTypePolicy, die eine createHTML() definiert, um eine Eingabezeichenfolge in TrustedHTML-Instanzen zu transformieren. Normalerweise verwenden Implementierungen von createHTML() eine Bibliothek wie DOMPurify, um die Eingabe zu sanitisieren, wie unten gezeigt:

const policy = trustedTypes.createPolicy("my-policy", {
  createHTML: (input) => DOMPurify.sanitize(input),
});

Dann verwenden wir dieses policy-Objekt, um ein TrustedHTML-Objekt aus der potenziell unsicheren Eingabezeichenfolge zu erstellen und das Ergebnis dem Element zuzuweisen:

// The potentially malicious string
const untrustedString = "<p>I might be XSS</p><img src='x' onerror='alert(1)'>";

// Create a TrustedHTML instance using the policy
const trustedHTML = policy.createHTML(untrustedString);

// Inject the TrustedHTML (which contains a trusted string)
const element = document.querySelector("#container");
element.outerHTML = trustedHTML; // Replaces the element with id "container"

// Note that the  #container div is no longer part of the document tree,

Warnung: Obwohl Sie direkt eine Zeichenfolge outerHTML zuweisen können, ist dies ein Sicherheitsrisiko, wenn die einzufügende Zeichenfolge potenziell bösartigen Inhalt enthalten könnte. Sie sollten TrustedHTML verwenden, um sicherzustellen, dass der Inhalt vor dem Einfügen gesäubert wird, und Sie sollten einen CSP-Header setzen, um vertrauenswürdige Typen durchzusetzen.

Spezifikationen Browser-Kompatibilität Siehe auch

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4