Start · Sprachen · JavaScript · Referenz · TrustedTypePolicyFactory.emptyScript

TrustedTypePolicyFactory.emptyScript

Eigenschaft

Schreibgeschützte Eigenschaft, die ein <code>TrustedScript</code>-Objekt mit leerer Zeichenfolge liefert, ganz ohne eigene Richtlinie.

seit JavaScript Chromium 83+ (Chrome, Edge), Safari 26+, Firefox 1 Kategorie: webapi

Signatur

TrustedTypePolicyFactory.emptyScript

Beschreibung

trustedTypes.emptyScript gibt ein fertiges TrustedScript-Objekt zurück, dessen Inhalt die leere Zeichenfolge "" ist. Ist per Content Security Policy require-trusted-types-for 'script' aktiv, nehmen Skript-Senken wie HTMLScriptElement.text, textContent eines <script>-Elements oder eval() nur noch TrustedScript-Werte an. Normale Zeichenketten werden dann abgelehnt.

Mit dieser Eigenschaft kann man eine solche Senke leeren oder zurücksetzen, ohne dafür eine eigene Richtlinie mit trustedTypes.createPolicy() anzulegen. Eine leere Zeichenkette kann keinen Code ausführen und ist deshalb immer unbedenklich. Das spart Richtliniennamen, die über die CSP-Direktive trusted-types ausdrücklich erlaubt werden müssten.

Außerdem dient emptyScript zur Funktionserkennung. In Browsern ohne native Trusted-Types-Unterstützung liefert ein Polyfill hier oft nur eine normale Zeichenkette. Mit trustedTypes.isScript(trustedTypes.emptyScript) lässt sich also prüfen, ob die Umgebung Trusted Types wirklich durchsetzt.

Rückgabewert

Typ
TrustedScript
Beschreibung
Ein TrustedScript-Objekt, dessen toString() bzw. toJSON() die leere Zeichenfolge "" zurückgibt.

Beispiele

Inhalt eines Script-Elements unter CSP zurücksetzen

// CSP: require-trusted-types-for 'script'
const script = document.querySelector('#inline-config');

// script.text = '';  // würde einen TypeError auslösen
script.text = trustedTypes.emptyScript; // erlaubt, ohne eigene Richtlinie

console.log(script.text === '');
true

Echte Trusted-Types-Unterstützung erkennen

const hasNativeTrustedTypes = () =>
  typeof window.trustedTypes !== 'undefined' &&
  trustedTypes.isScript(trustedTypes.emptyScript);

console.log(hasNativeTrustedTypes() ? 'Trusted Types aktiv' : 'Keine native Unterstützung');
Trusted Types aktiv // in Chromium-Browsern

Typ und Wert untersuchen

const empty = trustedTypes.emptyScript;

console.log(empty instanceof TrustedScript); // true
console.log(empty.toString().length);        // 0
console.log(JSON.stringify({ code: empty })); // {"code":""}
true 0 {"code":""}

Fallback für Browser ohne Trusted Types

// Liefert ein sicheres leeres Skript, egal ob die API existiert
const emptyScript = window.trustedTypes?.emptyScript ?? '';

const el = document.createElement('script');
el.text = emptyScript;
document.head.append(el);

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Trusted Types gibt es in Chromium-Browsern (Chrome, Edge, Opera) seit Version 83. Andere Browser haben erst deutlich später nachgezogen. window.trustedTypes kann daher undefined sein: vorher prüfen oder optionale Verkettung (?.) nutzen.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird ignoriert, im Strict Mode löst sie einen TypeError aus.
  • Sie liefert ausschließlich ein leeres Skript. Für echten Skriptinhalt braucht man weiterhin eine Richtlinie mit createScript-Funktion.
  • Für Skript-URLs gibt es kein Gegenstück. Das HTML-Pendant ist trustedTypes.emptyHTML.
  • In Workern ist die Fabrik über self.trustedTypes erreichbar.