Signatur
Beschreibung
Die schreibgeschützte Eigenschaft reducedData der Schnittstelle PreferenceManager (erreichbar über navigator.preferences) gibt ein PreferenceObject zurück. Es bildet die Nutzereinstellung zum reduzierten Datenverbrauch ab, die in CSS über die Media-Query prefers-reduced-data abgefragt wird.
Über das zurückgegebene Objekt kann eine Website:
- mit
valueden gerade wirksamen Wert lesen ("no-preference"oder"reduce"), - mit
overrideprüfen, ob die Website den Wert selbst überschrieben hat (null, wenn nicht), - mit
validValuesdie erlaubten Werte abfragen, - mit
requestOverride(value)einen eigenen Wert für diese Website setzen und mitclearOverride()wieder entfernen, - über das
change-Ereignis auf Änderungen reagieren.
Sinnvoll ist das zum Beispiel für einen „Datensparmodus“-Schalter in der eigenen Oberfläche: Nutzer können dort für genau diese Website den Datensparmodus aktivieren, ohne die Einstellung im Betriebssystem oder Browser zu ändern. Alle CSS-Regeln mit @media (prefers-reduced-data: reduce) und alle Abfragen über matchMedia() berücksichtigen den überschriebenen Wert dann automatisch.
Rückgabewert
PreferenceObject für die Einstellung reduzierter Datenverbrauch mit den Eigenschaften override, value und validValues, den Methoden requestOverride() und clearOverride() sowie dem Ereignis change.Beispiele
Aktuellen Wert mit Feature-Erkennung auslesen
const reducedData = navigator.preferences?.reducedData;
if (reducedData) {
console.log('Wirksamer Wert:', reducedData.value);
console.log('Überschrieben:', reducedData.override);
console.log('Erlaubte Werte:', reducedData.validValues);
} else {
// Rückfall auf die Media-Query (falls unterstützt)
const mq = matchMedia('(prefers-reduced-data: reduce)');
console.log('Datensparmodus laut Media-Query:', mq.matches);
}
Datensparmodus-Schalter für die eigene Website
const toggle = document.querySelector('#datensparen');
const pref = navigator.preferences?.reducedData;
if (pref) {
toggle.checked = pref.value === 'reduce';
toggle.addEventListener('change', async () => {
try {
if (toggle.checked) {
await pref.requestOverride('reduce');
} else {
// Zurück zur Einstellung von System/Browser
await pref.clearOverride();
}
} catch (err) {
console.error('Überschreiben fehlgeschlagen:', err);
toggle.checked = pref.value === 'reduce';
}
});
} else {
toggle.disabled = true;
}
Auf Änderungen reagieren und Bildqualität anpassen
const pref = navigator.preferences?.reducedData;
const applyImageQuality = () => {
const sparen = pref.value === 'reduce';
document.querySelectorAll('img[data-src-low]').forEach((img) => {
img.src = sparen ? img.dataset.srcLow : img.dataset.srcHigh;
});
console.log(`Bildqualität: ${sparen ? 'niedrig' : 'hoch'}`);
};
if (pref) {
applyImageQuality();
pref.addEventListener('change', applyImageQuality);
// alternativ: pref.onchange = applyImageQuality;
}
// Wichtig · Fallstricke
- Experimentell: Die Web Preferences API ist ein Entwurf.
navigator.preferencesist in keinem Browser standardmäßig verfügbar (in Chromium nur testweise hinter Flags bzw. Origin Trials). Auch die Media-Queryprefers-reduced-datawird bisher praktisch nicht unterstützt. Deshalb immer mit Feature-Erkennung arbeiten (navigator.preferences?.reducedData) und einen Rückfall vorsehen. - Die Eigenschaft ist schreibgeschützt: Eine Zuweisung wie
navigator.preferences.reducedData = 'reduce'hat keine Wirkung. Werte werden nur überrequestOverride()geändert. requestOverride()gibt einPromisezurück und kann abgelehnt werden, z. B. bei ungültigen Werten (nicht invalidValues) oder wenn der Browser das Überschreiben verweigert. Fehler daher immer abfangen.- Ein Override gilt nur für die eigene Origin und kann vom Browser später zurückgesetzt werden. Den Zustand deshalb nicht dauerhaft voraussetzen, sondern bei jedem Laden erneut aus
valuelesen. - Beim Überschreiben wird der Wunsch der Nutzer übergangen. Eine Überschreibung sollte nur durch eine ausdrückliche Aktion der Nutzer ausgelöst werden, nie automatisch.