Start · Sprachen · JavaScript · Referenz · PushMessageData.text()

PushMessageData.text()

Methode

Liest die Nutzdaten einer Push-Nachricht synchron als UTF-8-dekodierten Textstring aus.

seit JavaScript Push API – Chrome 50+, Firefox 44+, Edge 17+, Safa Kategorie: webapi

Signatur

PushMessageData.prototype.text()

Beschreibung

Die Methode text() der Schnittstelle PushMessageData gibt die Nutzdaten einer empfangenen Push-Nachricht als einfachen String zurück. Die Rohbytes werden dabei als UTF-8 dekodiert. Du erreichst das PushMessageData-Objekt im Service Worker über event.data im push-Event.

Anders als Response.text() aus der Fetch-API arbeitet PushMessageData.text() synchron: Sie liefert direkt einen string und kein Promise. Du kannst sie außerdem beliebig oft aufrufen, weil die Daten nicht wie ein Stream „verbraucht“ werden.

Nimm text(), wenn der Server einfachen Text schickt oder wenn du das Format erst selbst prüfen willst, bevor du es weiterverarbeitest. Das ist z. B. sinnvoll, wenn manche Nachrichten JSON sind und andere nicht. Für strukturierte Daten ist json() bequemer, für Binärdaten nimmst du arrayBuffer(), blob() oder bytes().

Rückgabewert

Typ
string
Beschreibung
Die Nutzdaten der Push-Nachricht als UTF-8-dekodierter String. Ungültige Byte-Folgen werden durch das Ersatzzeichen U+FFFD ersetzt.

Beispiele

Einfache Textbenachrichtigung im Service Worker anzeigen

// sw.js
self.addEventListener('push', (event) => {
  // event.data ist null, wenn die Nachricht keine Nutzdaten hat
  const body = event.data ? event.data.text() : 'Neue Nachricht';

  event.waitUntil(
    self.registration.showNotification('Meine App', { body })
  );
});
Benachrichtigung „Meine App“ mit dem gesendeten Text, z. B. „Dein Paket wurde versandt“

JSON robust parsen, bei Fehler auf Text ausweichen

// sw.js
const parsePayload = (data) => {
  if (!data) return { title: 'Hinweis', body: '' };
  const raw = data.text();
  try {
    return JSON.parse(raw);
  } catch {
    // kein gültiges JSON: Rohtext als Inhalt verwenden
    return { title: 'Hinweis', body: raw };
  }
};

self.addEventListener('push', (event) => {
  const { title, body } = parsePayload(event.data);
  event.waitUntil(self.registration.showNotification(title, { body }));
});
Bei '{"title":"Sale","body":"-20 %"}' → Titel „Sale“; bei 'Hallo' → Titel „Hinweis“, Text „Hallo“

Mehrfaches Lesen und Protokollieren

// sw.js
self.addEventListener('push', (event) => {
  if (!event.data) return;
  // text() ist synchron und kann mehrfach aufgerufen werden
  console.log('Länge:', event.data.text().length);
  console.log('Inhalt:', event.data.text());
});
Länge: 5 Inhalt: Hallo

// Wichtig · Fallstricke

  • Auf null prüfen: event.data ist null, wenn die Push-Nachricht keine Nutzdaten enthält. Rufst du dann event.data.text() auf, bekommst du einen TypeError.
  • Synchron, kein Promise: text() gibt direkt einen String zurück. Ein await schadet nicht, ist aber unnötig. Verwechsle die Methode nicht mit dem asynchronen Response.text().
  • Nur UTF-8: Andere Zeichenkodierungen werden falsch dekodiert. Binärdaten liest du deshalb besser mit arrayBuffer() oder bytes().
  • Nur im Service Worker: PushMessageData gibt es ausschließlich im push-Event eines Service Workers und nur in sicheren Kontexten (HTTPS).
  • Sicherheit: Behandle die Nutzdaten als nicht vertrauenswürdige Eingabe. Schreibe sie nicht ungeprüft per innerHTML in ein Dokument, sonst riskierst du XSS. Auf dem Transportweg sind die Nutzdaten nach RFC 8291 verschlüsselt. Der Browser entschlüsselt sie, bevor sie im push-Event ankommen.
  • Kompatibilität: Wird in allen aktuellen Browsern unterstützt. Safari auf iOS/iPadOS unterstützt Web Push erst ab 16.4 und nur für Web-Apps, die zum Home-Bildschirm hinzugefügt wurden.