Signatur
Beschreibung
Die schreibgeschützte Eigenschaft brands des Interfaces NavigatorUAData (erreichbar über navigator.userAgentData) liefert ein Array von Objekten. Jedes Objekt hat die Felder brand (z. B. "Google Chrome", "Chromium", "Microsoft Edge") und version (nur die Hauptversion als String, z. B. "124").
Die Eigenschaft gehört zur User-Agent Client Hints-API, die den klassischen, schwer zu parsenden navigator.userAgent-String ersetzen soll. brands zählt zu den sogenannten Low-Entropy-Hinweisen und ist deshalb synchron und ohne Nachfrage verfügbar. Genaue Versionsnummern (fullVersionList) müssen dagegen asynchron über getHighEntropyValues() angefordert werden.
Das Array enthält absichtlich einen „GREASE“-Eintrag mit einer erfundenen Marke (z. B. "Not.A/Brand" oder "Not A(Brand") und ändert die Reihenfolge der Einträge zufällig. So sollen Entwickler gezwungen werden, gezielt nach einer Marke zu suchen, statt feste Positionen oder exakte Listen abzufragen. Prüfen Sie daher immer mit some() oder find() und nie über einen Index.
Einsatzzwecke sind vor allem Statistik, Hinweise zur Browser-Version und Workarounds für bekannte Fehler einzelner Engines. Für normale Funktionsweichen ist die Feature-Erkennung (z. B. 'share' in navigator) fast immer die bessere Wahl.
Rückgabewert
brand (Markenname) und version (Hauptversion als String). Enthält immer auch einen GREASE-Eintrag mit Fantasienamen.Beispiele
Markenliste ausgeben (mit Feature-Erkennung)
if ('userAgentData' in navigator) {
for (const { brand, version } of navigator.userAgentData.brands) {
console.log(`${brand}: ${version}`);
}
} else {
console.log('UA Client Hints nicht verfügbar – Fallback auf navigator.userAgent');
}
Prüfen, ob ein Chromium-Browser ab Version 110 läuft
const isChromiumAtLeast = (minVersion) => {
const brands = navigator.userAgentData?.brands ?? [];
const entry = brands.find(({ brand }) => brand === 'Chromium');
return entry ? Number.parseInt(entry.version, 10) >= minVersion : false;
};
console.log(isChromiumAtLeast(110));
Exakte Versionen über getHighEntropyValues() nachladen
const getFullVersions = async () => {
if (!navigator.userAgentData) return null;
const { fullVersionList } = await navigator.userAgentData
.getHighEntropyValues(['fullVersionList']);
return fullVersionList;
};
getFullVersions().then((list) => console.table(list));
Edge gezielt erkennen
const isEdge = navigator.userAgentData?.brands
.some(({ brand }) => brand === 'Microsoft Edge') ?? false;
document.documentElement.classList.toggle('is-edge', isEdge);
console.log('Edge:', isEdge);
// Wichtig · Fallstricke
- Browser-Kompatibilität: Nur in Chromium-basierten Browsern (Chrome, Edge, Opera, Samsung Internet) vorhanden. Firefox und Safari stellen
navigator.userAgentDatanicht bereit – immer mit optionaler Verkettung (?.) oder'userAgentData' in navigatorabsichern. - Nur sichere Kontexte: Unter HTTP (außer
localhost) istnavigator.userAgentDataundefined. - GREASE-Eintrag: Die Liste enthält bewusst eine Fantasie-Marke und wechselnde Reihenfolgen. Niemals
brands[0]auswerten oder die Array-Länge fest erwarten. versionist ein String und nur die Hauptversion. Vor numerischen Vergleichen mitparseInt()umwandeln; für DetailversionengetHighEntropyValues(['fullVersionList'])nutzen.- Die Eigenschaft ist schreibgeschützt und das Array eingefroren – Zuweisungen oder
push()haben keine Wirkung bzw. werfen im Strict Mode einenTypeError. - Serverseitig stehen dieselben Informationen im HTTP-Header
Sec-CH-UAzur Verfügung. - Browsererkennung ist kein Ersatz für Feature-Erkennung; Marken können sich ändern oder von Browsern gezielt anders gemeldet werden.