Start · Sprachen · JavaScript · Referenz · Notification.vibrate

Notification.vibrate

Eigenschaft

Schreibgeschützte Eigenschaft, die das beim Erstellen festgelegte Vibrationsmuster einer Benachrichtigung als Array von Millisekunden-Werten liefert.

seit JavaScript Experimentell: Chromium-basierte Browser (Chrome 5 Kategorie: webapi

Signatur

Notification.vibrate

Beschreibung

Die Eigenschaft vibrate einer Notification-Instanz gibt das Vibrationsmuster zurück, das die Vibrationshardware des Geräts abspielen soll, sobald die Benachrichtigung angezeigt wird. Das Muster wird nicht über die Eigenschaft selbst gesetzt, sondern über die Option vibrate im Konstruktor new Notification(title, options) oder in ServiceWorkerRegistration.showNotification(title, options).

Das Muster folgt demselben Format wie bei navigator.vibrate(): Die Werte wechseln sich ab zwischen Vibrationsdauer und Pause, jeweils in Millisekunden. [200, 100, 200] heißt also: 200 ms vibrieren, 100 ms Pause, noch einmal 200 ms vibrieren. Übergibst du nur eine einzelne Zahl, wird sie intern in ein Array mit einem Element umgewandelt. Wurde kein Muster angegeben, liefert die Eigenschaft ein leeres Array.

Nützlich ist die Eigenschaft vor allem, um bestehende Benachrichtigungen auszuwerten, etwa solche, die du über registration.getNotifications() in einem Service Worker abrufst, oder um beim Debuggen zu prüfen, welches Muster tatsächlich übernommen wurde. Ob das Gerät wirklich vibriert, entscheiden Hardware, Betriebssystem und Nutzereinstellungen (z. B. der Lautlos-Modus).

Rückgabewert

Typ
ReadonlyArray<number>
Beschreibung
Ein eingefrorenes Array (FrozenArray<unsigned long>) mit abwechselnden Vibrations- und Pausendauern in Millisekunden. Es ist leer, wenn kein Muster angegeben wurde.

Beispiele

Vibrationsmuster setzen und auslesen

const zeigeHinweis = async () => {
  const erlaubnis = await Notification.requestPermission();
  if (erlaubnis !== 'granted') return;

  const n = new Notification('Neue Nachricht', {
    body: 'Anna hat dir geschrieben.',
    vibrate: [200, 100, 200]
  });

  console.log(n.vibrate);
  console.log(Object.isFrozen(n.vibrate));
};

zeigeHinweis();
[200, 100, 200] true

Im Service Worker anzeigen und später auswerten

// Funktioniert auch unter Android, wo new Notification() nicht erlaubt ist
const benachrichtige = async () => {
  const registration = await navigator.serviceWorker.ready;

  await registration.showNotification('Termin in 5 Minuten', {
    body: 'Team-Meeting im Raum 3',
    tag: 'termin-42',
    vibrate: [300, 100, 300, 100, 300]
  });

  const offene = await registration.getNotifications({ tag: 'termin-42' });
  offene.forEach((n) => {
    const gesamt = n.vibrate.reduce((summe, ms) => summe + ms, 0);
    console.log(`${n.title}: Muster ${n.vibrate.join('/')} (${gesamt} ms)`);
  });
};

benachrichtige();
Termin in 5 Minuten: Muster 300/100/300/100/300 (1100 ms)

Unterstützung prüfen und Einzelwert übergeben

const unterstuetztVibration = 'vibrate' in Notification.prototype;
console.log('vibrate unterstützt:', unterstuetztVibration);

if (unterstuetztVibration && Notification.permission === 'granted') {
  // Eine einzelne Zahl wird zu einem Array mit einem Element
  const n = new Notification('Upload fertig', { vibrate: 500 });
  console.log(n.vibrate);
}
vibrate unterstützt: true [500]

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie n.vibrate = [100] hat keine Wirkung (im Strict Mode gibt es einen TypeError). Das Muster lässt sich nur beim Erstellen festlegen. Das zurückgegebene Array ist eingefroren.
  • Nicht mit silent kombinierbar: Gibst du vibrate zusammen mit silent: true an, löst der Konstruktor bzw. showNotification() einen TypeError aus.
  • Browser-Unterstützung: Die Eigenschaft ist experimentell und praktisch nur in Chromium-Browsern vorhanden. Firefox und Safari kennen sie nicht, dort ist der Wert undefined. Prüfe die Unterstützung vorher, z. B. mit 'vibrate' in Notification.prototype.
  • Wirkung nur auf passender Hardware: Auf Desktop-Geräten ohne Vibrationsmotor wird das Muster ignoriert. Auch unter Android können Systemeinstellungen (Lautlos-Modus, Kanal-Einstellungen, Energiesparmodus) die Vibration unterdrücken. Einige Chrome-Versionen ab Android O ignorieren eigene Muster ganz.
  • Android: Dort ist new Notification() nicht erlaubt („Illegal constructor“). Nutze stattdessen ServiceWorkerRegistration.showNotification().
  • Benachrichtigungen erfordern einen sicheren Kontext (HTTPS) und eine erteilte Erlaubnis (Notification.permission === 'granted').