Start · Sprachen · JavaScript · Referenz · BackgroundFetchRecord.request

BackgroundFetchRecord.request

Eigenschaft

Schreibgeschützte Eigenschaft, die das <code>Request</code>-Objekt mit den Details der Ressource liefert, die ein Background Fetch abruft.

seit JavaScript Experimentell: Chromium-Browser (Chrome/Edge 74+), Kategorie: webapi

Signatur

BackgroundFetchRecord.request

Beschreibung

Die Eigenschaft request eines BackgroundFetchRecord gibt ein Request-Objekt zurück. Darin stehen URL, Methode, Header und weitere Angaben der Anfrage, die im Rahmen eines Background Fetch abgesetzt wurde. Jeder Datensatz steht für genau ein Anfrage-Antwort-Paar.

Gebraucht wird die Eigenschaft vor allem im Service Worker, etwa in den Handlern für backgroundfetchsuccess oder backgroundfetchfail. Dort ruft man mit registration.matchAll() alle Datensätze ab und legt die heruntergeladenen Dateien meist im Cache ab. Die Anfrage aus record.request dient dabei als Cache-Schlüssel. So findet ein späteres caches.match() die Antwort genau zu dieser Anfrage.

Weil das Request-Objekt sofort verfügbar ist, kann man anhand von request.url auch filtern oder Fortschrittsanzeigen beschriften. Die zugehörige Antwort ist dagegen nur als Promise (record.responseReady) erreichbar.

Rückgabewert

Typ
Request
Beschreibung
Ein Request-Objekt, das die abzurufende Ressource beschreibt: URL, Methode, Header und weitere Angaben.

Beispiele

Heruntergeladene Dateien im Cache ablegen

// service-worker.js
self.addEventListener('backgroundfetchsuccess', (event) => {
  const bgFetch = event.registration;

  event.waitUntil((async () => {
    const cache = await caches.open('downloads');
    const records = await bgFetch.matchAll();

    await Promise.all(records.map(async (record) => {
      const response = await record.responseReady;
      // record.request dient als Cache-Schlüssel
      await cache.put(record.request, response);
    }));

    await event.updateUI({ title: 'Download abgeschlossen' });
  })());
});

URLs und Methoden aller Datensätze protokollieren

self.addEventListener('backgroundfetchfail', (event) => {
  event.waitUntil((async () => {
    const records = await event.registration.matchAll();
    for (const { request } of records) {
      console.log(`${request.method} ${request.url}`);
    }
  })());
});
GET https://example.com/podcast/folge-1.mp3 GET https://example.com/podcast/folge-2.mp3

Einen bestimmten Datensatz über die Anfrage finden

self.addEventListener('backgroundfetchsuccess', (event) => {
  event.waitUntil((async () => {
    // match() akzeptiert eine URL oder einen Request
    const record = await event.registration.match('/videos/intro.mp4');
    if (record) {
      console.log('Gefunden:', record.request.url);
      const response = await record.responseReady;
      console.log('Status:', response.status);
    }
  })());
});
Gefunden: https://example.com/videos/intro.mp4 Status: 200

// Wichtig · Fallstricke

  • Experimentelle API: Background Fetch gibt es derzeit nur in Chromium-Browsern (Chrome, Edge, Opera). Firefox und Safari unterstützen sie nicht. Prüfen Sie die Verfügbarkeit mit 'BackgroundFetchManager' in self.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung hat keine Wirkung.
  • Nur in sicheren Kontexten (HTTPS) und mit einem registrierten Service Worker verfügbar.
  • matchAll() und match() werfen einen InvalidStateError, sobald die Datensätze nicht mehr verfügbar sind, etwa nach Ende des Event-Handlers. Rufen Sie sie deshalb innerhalb von event.waitUntil() auf.
  • Braucht der Body der Anfrage mehrfach, klonen Sie sie mit record.request.clone(), denn ein Body lässt sich nur einmal lesen.