Start · Sprachen · JavaScript · Referenz · NavigatorUAData.mobile

NavigatorUAData.mobile

Eigenschaft

Schreibgeschützter Boolean der User-Agent Client Hints API, der angibt, ob der Browser ein mobiles Gerät meldet.

seit JavaScript Chromium 90+ (Chrome, Edge, Opera); nicht in Firef Kategorie: webapi

Signatur

NavigatorUAData.mobile

Beschreibung

Die schreibgeschützte Eigenschaft mobile der Schnittstelle NavigatorUAData liefert true, wenn der Browser eine mobile Umgebung meldet (z. B. Chrome auf einem Android-Smartphone), sonst false. Du erreichst sie über navigator.userAgentData.mobile.

mobile gehört zu den Werten mit geringer Entropie der User-Agent Client Hints. Sie ist deshalb synchron verfügbar, ohne getHighEntropyValues() aufzurufen. Auf Serverseite entspricht ihr der HTTP-Header Sec-CH-UA-Mobile (?1 bzw. ?0).

Gedacht ist die Eigenschaft als strukturierter, datenschutzfreundlicher Ersatz für das fehleranfällige Parsen von navigator.userAgent nach Stichworten wie "Mobi". Sinnvoll ist sie etwa für Statistik, für die Wahl einer passenden Download-Variante oder als grobe Voreinstellung, zum Beispiel eine vereinfachte Oberfläche.

Für das Layout selbst solltest du aber weiterhin Feature Detection und Media Queries nutzen, etwa (pointer: coarse), (hover: none) oder die Viewport-Breite. Aus „mobil“ folgt nämlich weder eine bestimmte Bildschirmgröße noch zwingend eine Touch-Eingabe.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn der User-Agent ein mobiles Gerät meldet, sonst false.

Beispiele

Einfache Abfrage mit Fallback

// Client Hints nutzen, wenn vorhanden – sonst auf den UA-String zurückfallen
const isMobile = () => {
  if (navigator.userAgentData) {
    return navigator.userAgentData.mobile;
  }
  // Fallback für Firefox/Safari (ungenauer)
  return /Mobi|Android/i.test(navigator.userAgent);
};

console.log(`Mobiles Gerät: ${isMobile()}`);
Mobiles Gerät: false

Voreinstellung für eine vereinfachte Oberfläche

const applyInitialMode = () => {
  const uaMobile = navigator.userAgentData?.mobile ?? false;
  // Mit einer Media Query kombinieren – die tatsächliche Eingabeart ist entscheidend
  const coarsePointer = window.matchMedia('(pointer: coarse)').matches;

  document.documentElement.classList.toggle('compact-ui', uaMobile || coarsePointer);
  console.log({ uaMobile, coarsePointer });
};

applyInitialMode();
{ uaMobile: true, coarsePointer: true }

Wert an ein Analytics-Backend senden

const reportDeviceClass = async () => {
  const data = navigator.userAgentData;
  const payload = {
    mobile: data?.mobile ?? null,          // geringe Entropie, synchron
    platform: data?.platform ?? 'unbekannt',
    brands: data?.brands.map(b => `${b.brand} ${b.version}`) ?? []
  };

  await fetch('/api/analytics/device', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(payload)
  });
  console.log('Gesendet:', payload);
};

reportDeviceClass();
Gesendet: { mobile: false, platform: 'Windows', brands: ['Not A(Brand 99', 'Google Chrome 121', 'Chromium 121'] }

Auch in getHighEntropyValues() enthalten

const logUAInfo = async () => {
  if (!navigator.userAgentData) return console.log('Client Hints nicht unterstützt');
  const info = await navigator.userAgentData.getHighEntropyValues(['model']);
  // mobile, platform und brands sind im Ergebnis immer enthalten
  console.log(info.mobile, info.model);
};

logUAInfo();
true Pixel 7

// Wichtig · Fallstricke

  • Browser-Unterstützung: Nur in Chromium-Browsern (Chrome, Edge, Opera, Samsung Internet) vorhanden. In Firefox und Safari ist navigator.userAgentData undefined. Prüfe deshalb immer mit optionaler Verkettung (?.) und sieh einen Fallback vor.
  • Nur in sicheren Kontexten: Über HTTP (außer localhost) ist die API nicht verfügbar.
  • Tablets: Auf Tablets meldet der Browser oft false, etwa wenn Chrome auf Android-Tablets eine Desktop-Ansicht anfordert. Der Modus „Desktop-Website anfordern“ setzt den Wert ebenfalls auf false. In den DevTools lässt sich der Wert per Geräteemulation verändern.
  • Nicht für das Layout verwenden: mobile sagt nichts über Bildschirmgröße, Touch-Eingabe oder Leistung aus. Für responsives Design nutzt du Media Queries wie (pointer: coarse) und (hover: none).
  • Nicht vertrauenswürdig: Der Client kann den Wert fälschen. Für sicherheitsrelevante Entscheidungen ist er ungeeignet.
  • Serverseitig ist derselbe Wert ohne Zusatzanfrage über den Header Sec-CH-UA-Mobile verfügbar.