Start · Sprachen · JavaScript · Referenz · WorkerGlobalScope.importScripts()

WorkerGlobalScope.importScripts()

Methode

Lädt ein oder mehrere Skripte synchron und führt sie im globalen Geltungsbereich eines klassischen Workers aus.

seit JavaScript Baseline: alle Browser (Web Workers) Kategorie: webapi

Signatur

WorkerGlobalScope.prototype.importScripts(...urls)

Beschreibung

importScripts() steht in klassischen Web Workern (DedicatedWorkerGlobalScope, SharedWorkerGlobalScope) und in Service Workern zur Verfügung. Die Methode lädt die angegebenen Skripte, führt sie der Reihe nach im globalen Geltungsbereich des Workers aus und kehrt erst zurück, wenn alle Skripte geladen und ausgeführt wurden. Funktionen und Variablen, die diese Skripte global anlegen, stehen danach direkt zur Verfügung.

Die Skripte dürfen parallel heruntergeladen werden, ausgeführt werden sie aber immer in der Reihenfolge, in der die URLs übergeben wurden. Relative URLs werden relativ zur URL des Worker-Skripts aufgelöst, nicht relativ zur HTML-Seite.

Man nutzt importScripts() vor allem, um Hilfsbibliotheken (z. B. Kryptografie- oder Parser-Bibliotheken ohne ES-Modul-Build) in einen Worker zu laden oder Code auf mehrere Dateien aufzuteilen. In Modul-Workern (new Worker(url, { type: "module" })) ist die Methode nicht erlaubt – dort verwendet man stattdessen import-Anweisungen oder dynamisches import().

Parameter

Name Typ Default Beschreibung
$...urls string | URL Beliebig viele URLs der zu importierenden Skripte. Relative Angaben werden relativ zur Worker-Skript-URL aufgelöst. Ohne Argument passiert nichts.

Rückgabewert

Typ
void
Beschreibung
Kein Rückgabewert (undefined). Die importierten Skripte wirken über ihre globalen Seiteneffekte.

Beispiele

Hilfsbibliothek in einen Worker laden

// math-utils.js
function fakultaet(n) {
  return n <= 1 ? 1 : n * fakultaet(n - 1);
}

// worker.js
importScripts("math-utils.js");

self.addEventListener("message", (event) => {
  const ergebnis = fakultaet(event.data);
  self.postMessage(ergebnis);
});

// main.js
const worker = new Worker("worker.js");
worker.addEventListener("message", (e) => console.log("Ergebnis:", e.data));
worker.postMessage(5);
Ergebnis: 120

Mehrere Skripte in fester Reihenfolge importieren

// worker.js
// config.js definiert CONFIG, logger.js nutzt CONFIG, app.js nutzt beide
importScripts("lib/config.js", "lib/logger.js", "lib/app.js");

// Ab hier sind alle globalen Definitionen verfügbar
console.log(typeof CONFIG, typeof log);
object function

Ladefehler abfangen

// worker.js
try {
  importScripts("https://cdn.example.com/parser.min.js");
  self.postMessage({ status: "bereit" });
} catch (err) {
  // NetworkError bei Lade-/CORS-Problemen, SyntaxError bei ungültigem Code
  self.postMessage({ status: "fehler", name: err.name, message: err.message });
}
{ status: "fehler", name: "NetworkError", message: "..." } (falls die URL nicht erreichbar ist)

Modul-Worker: stattdessen import verwenden

// main.js
const worker = new Worker(new URL("./modul-worker.js", import.meta.url), {
  type: "module",
});

// modul-worker.js
// importScripts("x.js") würde hier einen TypeError werfen
import { fakultaet } from "./math-utils.mjs";

self.onmessage = (e) => self.postMessage(fakultaet(e.data));

// Wichtig · Fallstricke

  • Nur klassische Worker: In Modul-Workern (type: "module") wirft importScripts() einen TypeError. Dort import bzw. import() nutzen.
  • Synchron und blockierend: Der Worker-Thread bleibt stehen, bis alle Skripte geladen und ausgeführt sind. Der Haupt-Thread ist davon nicht betroffen, trotzdem sollten große Imports nur einmal beim Start erfolgen.
  • Fehler: Schlägt das Laden fehl (404, falscher MIME-Typ, CORS), wird ein NetworkError geworfen; Syntaxfehler im geladenen Skript führen zu einem SyntaxError. Nachfolgende Skripte der Liste werden dann nicht mehr ausgeführt.
  • Service Worker: Nach der Installation dürfen nur Skripte importiert werden, die bereits während install geladen (und damit gecacht) wurden. Spätere Aufrufe mit neuen URLs werfen einen NetworkError. Imports daher am Anfang des Skripts auf oberster Ebene platzieren.
  • Sicherheit: Importierter Code läuft mit vollen Rechten des Workers. Fremdskripte von CDNs nur aus vertrauenswürdigen Quellen laden; die Content Security Policy (script-src bzw. worker-src) gilt auch für importScripts(). Nie URLs aus Benutzereingaben übernehmen.
  • Die Skripte teilen sich einen globalen Geltungsbereich – Namenskollisionen zwischen Bibliotheken sind möglich.