Signatur
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
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();
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();
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);
}
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
n.vibrate = [100]hat keine Wirkung (im Strict Mode gibt es einenTypeError). Das Muster lässt sich nur beim Erstellen festlegen. Das zurückgegebene Array ist eingefroren. - Nicht mit
silentkombinierbar: Gibst duvibratezusammen mitsilent: truean, löst der Konstruktor bzw.showNotification()einenTypeErroraus. - 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 stattdessenServiceWorkerRegistration.showNotification(). - Benachrichtigungen erfordern einen sicheren Kontext (HTTPS) und eine erteilte Erlaubnis (
Notification.permission === 'granted').