Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

WorkerGlobalScope: importScripts() Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.

Hinweis: Diese Funktion ist nur in Web Workers verfügbar.

Warnung: Die an diese Methode übergebenen Parameter repräsentieren die URLs von klassischen Skripten, die in einen Worker importiert werden sollen. Solche APIs sind als Injection-Sinks bekannt und stellen potenziell einen Vektor für Cross-Site Scripting (XSS)-Angriffe dar.

Sie können dieses Risiko mindern, indem Sie eine Content Security Policy (CSP) haben, die die Orte einschränkt, von denen Skripte geladen werden können, und indem Sie immer TrustedScriptURL-Objekte anstelle von Zeichenfolgen zuweisen und Trusted Types durchsetzen. Weitere Informationen finden Sie unter Sicherheitsüberlegungen.

Die importScripts()-Methode der WorkerGlobalScope-Schnittstelle importiert synchron ein oder mehrere Skripte in den Geltungsbereich eines klassischen Workers (ein Worker, der aus einem klassischen Skript konstruiert wurde).

Beachten Sie, dass die Methode nicht in Modul-Workern verwendet werden kann, die stattdessen Abhängigkeiten mithilfe von import-Anweisungen laden.

Syntax

js
importScripts(url0)
importScripts(url0, url1)
importScripts(url0, url1, /* …, */ urlN)

Parameter

urlN

Eine Instanz von TrustedScriptURL oder eine Zeichenkette, die die URL des zu importierenden Skripts darstellt. Die URL kann absolut oder relativ sein. Wenn die URL relativ ist, ist sie relativ zur URL des Einstiegsskripts des Workers.

Rückgabewert

Kein (undefined).

Ausnahmen

NetworkError

Importierte Skripte wurden ohne einen text/javascript-Medientyp (MIME) oder ohne einen der erlaubten Legacy-JavaScript-MIME-Typen bereitgestellt.

SyntaxError

Ausgelöst, wenn eine URL nicht aufgelöst werden kann.

TypeError

Ausgelöst, wenn der aktuelle WorkerGlobalScope ein Modul ist (verwenden Sie stattdessen import). Dies kann auch passieren, wenn ein Parameter kein TrustedScriptURL ist und die Seite Trusted Types durchsetzt.

Beschreibung

Die importScripts()-Methode importiert synchron ein oder mehrere Skripte in den Geltungsbereich eines klassischen Workers.

Im Gegensatz zum anfänglichen klassischen Modulskript, das mit seinem Dokument gleichen Ursprungs sein muss, kann diese Methode skripte über Ursprungsgrenzen hinweg importieren, es sei denn, dies wird durch einen Cross-Origin-Resource-Policy, eine Content Security Policy (CSP) oder einen anderen Sicherheitsmechanismus blockiert. Beachten Sie, dass klassische Skripte im no-cors-Modus abgerufen werden, sodass sie über Ursprungsgrenzen hinweg abgerufen werden können, selbst wenn der Server nicht die entsprechenden CORS-Header setzt.

Sicherheitsüberlegungen

Die Parameter geben Skripte an, die in den Geltungsbereich eines klassischen Workers importiert werden sollen. Wenn die URLs der Skripte von einem Benutzer bereitgestellt werden, ist dies ein möglicher Vektor für Cross-Site Scripting (XSS)-Angriffe.

Es ist äußerst riskant, willkürliche URLs von unzuverlässigen Ursprüngen zu akzeptieren und auszuführen. Eine Website sollte kontrolle darüber haben, welche Skripte mit einer Content Security Policy (CSP) und der ???directive script-src (oder einem Fallback, das in default-src definiert ist) ausgeführt werden dürfen. Dies kann Skripte auf solche vom aktuellen Ursprung, einer bestimmten Menge von Ursprüngen oder sogar bestimmten Dateien beschränken.

Wenn Sie diese Eigenschaft verwenden und Trusted Types durchsetzen (unter Verwendung der require-trusted-types-for CSP-Direktive), müssen Sie immer TrustedScriptURL-Objekte anstelle von Zeichenfolgen zuweisen. Dies stellt sicher, dass die Eingabe durch eine Transformationsfunktion weitergeleitet wird, die die Möglichkeit hat, die URL vor der Injektion abzulehnen oder zu ändern.

Beispiele

Grundlegende Verwendung

Wenn Sie einige Funktionen in einem separaten Skript namens foo.js im gleichen Verzeichnis wie worker.js geschrieben hätten, könnten Sie es mit der folgenden Zeile in den Worker importieren:

js
importScripts("foo.js");

importScripts() und self.importScripts() sind im Wesentlichen gleichwertig — beide repräsentieren importScripts(), das aus dem inneren Geltungsbereich des Workers aufgerufen wird.

Beachten Sie, dass wir Ihnen im nächsten Abschnitt zeigen, wie Sie anstelle einer Zeichenfolge ein TrustedScriptURL übergeben können. Dies wurde in diesem Beispiel der Kürze halber weggelassen, wird jedoch in Produktivcode empfohlen.

Verwendung von TrustedScriptURL

Um das Risiko von XSS zu mindern, sollten wir stets TrustedScriptURL-Instanzen an jeden der Parameter zuweisen. Wir müssen dies auch tun, wenn wir aus anderen Gründen Trusted Types durchsetzen und einige Skriptquellen zulassen wollen, die erlaubt sind (zum Beispiel durch CSP: script-src).

Trusted Types werden noch nicht von allen Browsern unterstützt, daher definieren wir zuerst die trusted types tinyfill. Dies dient als transparenter Ersatz für die Trusted Types JavaScript API:

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

Als Nächstes erstellen wir eine TrustedTypePolicy, die eine createScriptURL()-Methode definiert, um Eingabezeichenfolgen in TrustedScriptURL-Instanzen zu transformieren.

Für den Zweck dieses Beispiels gehen wir davon aus, dass wir eine vordefinierte Menge von URLs im scriptAllowList-Array zulassen und andere Skripte protokollieren wollen.

js
const scriptAllowList = [
  // Some list of allowed URLs
];
const policy = trustedTypes.createPolicy("script-url-policy", {
  createScriptURL(input) {
    if (scriptAllowList.includes(input)) {
      return input; // allow the script
    }
    console.log(`Script not in scriptAllowList: ${input}`);
    return ""; // Block the script
  },
});

Dann verwenden wir das policy-Objekt, um ein TrustedScript-Objekt aus einer potenziell unsicheren Eingabezeichenfolge zu erstellen:

js
// The potentially malicious string
// We won't be including untrustedScript in our scriptAllowList array
const untrustedScript = "https://evil.example.com/import_worker.js";

// Create a TrustedScriptURL instance using the policy
const trustedScriptURL = policy.createScriptURL(untrustedScript);

Das TrustedScriptURL-Objekt kann jetzt beim Importieren des Skripts in einem klassischen Worker verwendet werden:

js
importScripts(trustedScriptURL);

Spezifikationen

Specification
HTML
# dom-workerglobalscope-importscripts-dev

Browser-Kompatibilität

Siehe auch