Start · Sprachen · JavaScript · Referenz · Navigator.globalPrivacyControl

Navigator.globalPrivacyControl

Eigenschaft

Gibt als <code>boolean</code> zurück, ob der Nutzer per Global Privacy Control (GPC) dem Verkauf oder der Weitergabe seiner Daten widerspricht.

seit JavaScript Experimentell: Firefox 120+, Brave, DuckDuckGo-Bro Kategorie: webapi

Signatur

get Navigator.globalPrivacyControl

Beschreibung

Die schreibgeschützte Eigenschaft navigator.globalPrivacyControl zeigt, welche Global Privacy Control-Einstellung (GPC) der Nutzer für die aktuelle Website gewählt hat. Der Wert true bedeutet: Der Nutzer widerspricht ausdrücklich dem Verkauf seiner personenbezogenen Daten und ihrer Weitergabe an Dritte. false heißt, dass er keine solche Präferenz angegeben hat. Eine Einwilligung ist das nicht.

GPC ist der Nachfolger des gescheiterten Do Not Track-Signals. Anders als DNT ist GPC in einigen Rechtsordnungen rechtlich verbindlich, zum Beispiel nach CCPA/CPRA in Kalifornien und nach dem Colorado Privacy Act. Unter der DSGVO kann GPC als Widerspruch nach Art. 21 gewertet werden. Das Signal kommt auf zwei Wegen an: serverseitig als HTTP-Anfrage-Header Sec-GPC: 1 und clientseitig über diese Eigenschaft.

Typische Anwendungsfälle: Tracking- oder Werbeskripte von Drittanbietern gar nicht erst laden, Consent-Management-Plattformen (CMP) passend vorbelegen oder das Opt-out an das eigene Backend melden. Die Eigenschaft gibt es auch in Web Workern über WorkerNavigator.globalPrivacyControl.

Rückgabewert

Typ
boolean | undefined
Beschreibung
true, wenn der Nutzer dem Verkauf und der Weitergabe seiner Daten widerspricht, sonst false. Browser ohne GPC-Unterstützung liefern undefined, weil es die Eigenschaft dort nicht gibt.

Beispiele

GPC-Status mit Feature-Erkennung auslesen

const getGpcStatus = () => {
  if (!('globalPrivacyControl' in navigator)) {
    return 'nicht unterstützt';
  }
  return navigator.globalPrivacyControl ? 'Opt-out aktiv' : 'kein Signal';
};

console.log(`GPC: ${getGpcStatus()}`);
GPC: Opt-out aktiv // z. B. in Firefox mit aktivierter GPC-Einstellung

Tracking-Skript nur ohne GPC-Signal nachladen

const loadScript = (src) => new Promise((resolve, reject) => {
  const script = document.createElement('script');
  script.src = src;
  script.async = true;
  script.onload = resolve;
  script.onerror = reject;
  document.head.append(script);
});

const initAnalytics = async () => {
  if (navigator.globalPrivacyControl === true) {
    console.info('GPC erkannt – Drittanbieter-Tracking wird nicht geladen.');
    return;
  }
  await loadScript('https://analytics.example.com/tracker.js');
  console.info('Analytics geladen.');
};

initAnalytics();
GPC erkannt – Drittanbieter-Tracking wird nicht geladen.

Opt-out an das Backend melden

const syncPrivacyPreference = async (userId) => {
  const optOut = navigator.globalPrivacyControl === true;
  const response = await fetch('/api/privacy-preferences', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ userId, doNotSell: optOut, source: 'gpc' })
  });
  return response.ok;
};

syncPrivacyPreference('u-4711').then((ok) => console.log('Gespeichert:', ok));
Gespeichert: true

Auslesen in einem Web Worker

// worker.js
self.addEventListener('message', () => {
  self.postMessage({ gpc: self.navigator.globalPrivacyControl ?? null });
});

// main.js
const worker = new Worker('worker.js');
worker.onmessage = ({ data }) => console.log('GPC im Worker:', data.gpc);
worker.postMessage('check');
GPC im Worker: false

// Wichtig · Fallstricke

  • Experimentell und nicht standardisiert: Die Spezifikation stammt aus der W3C Privacy Community Group und ist kein offizieller W3C-Standard. Nativ unterstützen GPC Firefox (ab Version 120, per Einstellung), Brave und der DuckDuckGo-Browser. Chrome und Safari unterstützen es nur über Erweiterungen, zum Beispiel Privacy Badger. Deshalb immer mit 'globalPrivacyControl' in navigator prüfen, ob die Eigenschaft existiert.
  • false ist keine Einwilligung: Ein fehlendes Signal ersetzt kein Consent-Banner. Rechtlich nötige Einwilligungen, etwa nach DSGVO oder TTDSG, musst du weiterhin einholen.
  • Server bevorzugen: Der Header Sec-GPC: 1 kommt schon mit der ersten Anfrage an. Damit kannst du das Einbinden von Trackern im HTML ganz unterdrücken, bevor irgendein JavaScript läuft.
  • Nicht überschreibbar: Die Eigenschaft hat nur einen Getter. Eine Zuweisung wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus einen TypeError aus.
  • Fingerprinting: Der Wert ist ein weiteres Unterscheidungsmerkmal zwischen Browsern. Nutze ihn nur, um die Datenschutzpräferenz des Nutzers umzusetzen.
  • Die Einstellung kann je nach Website verschieden sein, weil Browser oder Erweiterungen Ausnahmen pro Website erlauben. Lies den Wert deshalb nicht nur einmal global aus, sondern auf jeder Website neu.