Signatur
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
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 })
);
});
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 }));
});
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());
});
// Wichtig · Fallstricke
- Auf
nullprüfen:event.dataistnull, wenn die Push-Nachricht keine Nutzdaten enthält. Rufst du dannevent.data.text()auf, bekommst du einenTypeError. - Synchron, kein Promise:
text()gibt direkt einen String zurück. Einawaitschadet nicht, ist aber unnötig. Verwechsle die Methode nicht mit dem asynchronenResponse.text(). - Nur UTF-8: Andere Zeichenkodierungen werden falsch dekodiert. Binärdaten liest du deshalb besser mit
arrayBuffer()oderbytes(). - Nur im Service Worker:
PushMessageDatagibt es ausschließlich impush-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
innerHTMLin ein Dokument, sonst riskierst du XSS. Auf dem Transportweg sind die Nutzdaten nach RFC 8291 verschlüsselt. Der Browser entschlüsselt sie, bevor sie impush-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.