Start · Sprachen · JavaScript · Referenz · HIDDevice.forget()

HIDDevice.forget()

Methode

Schließt die Verbindung zum HID-Gerät und entzieht der Seite die erteilte Berechtigung, sodass das Gerät nicht mehr über <code>navigator.hid.getDevices()</code> erscheint.

seit JavaScript Chrome/Edge 100+ (WebHID, experimentell, kein Base Kategorie: webapi

Signatur

HIDDevice.prototype.forget()

Beschreibung

Die Methode forget() der Schnittstelle HIDDevice gehört zur WebHID-API. Sie schließt eine offene Verbindung zum Gerät und widerruft die Berechtigung, die der Nutzer der Webseite zuvor über navigator.hid.requestDevice() erteilt hat. Danach liefert navigator.hid.getDevices() das Gerät nicht mehr zurück.

Einsetzen solltest du forget(), wenn der Nutzer ein Gerät bewusst „abmelden“ oder „entkoppeln“ möchte, etwa über einen Button „Gerät entfernen“ in den Einstellungen deiner Web-App. Auch bei gemeinsam genutzten Rechnern (Kiosk, Schulungsräume) ist das sinnvoll, damit der nächste Nutzer nicht automatisch Zugriff auf das Gerät hat.

Anders als HIDDevice.close(), das nur die Verbindung trennt und die Berechtigung behält, ist forget() endgültig: Um das Gerät erneut zu nutzen, muss requestDevice() wieder aufgerufen werden, und das geht nur nach einer Nutzeraktion (z. B. Klick).

Rückgabewert

Typ
Promise<undefined>
Beschreibung
Ein Promise, das mit undefined erfüllt wird, sobald die Verbindung geschlossen und die Berechtigung entzogen ist.

Beispiele

Gerät über einen Button vergessen

const btn = document.querySelector('#geraet-entfernen');

btn.addEventListener('click', async () => {
  const [device] = await navigator.hid.getDevices();
  if (!device) {
    console.log('Kein berechtigtes Gerät vorhanden.');
    return;
  }
  await device.forget();
  console.log(`${device.productName} wurde vergessen.`);
});
Mein Gamepad wurde vergessen.

Alle berechtigten Geräte zurücksetzen

const alleGeraeteVergessen = async () => {
  const devices = await navigator.hid.getDevices();
  await Promise.all(devices.map((d) => d.forget()));
  const rest = await navigator.hid.getDevices();
  console.log(`Verbleibende Geräte: ${rest.length}`);
};

alleGeraeteVergessen();
Verbleibende Geräte: 0

Mit Feature-Erkennung und Fehlerbehandlung

const geraetEntkoppeln = async (device) => {
  if (!('hid' in navigator) || typeof device.forget !== 'function') {
    console.warn('WebHID bzw. forget() wird nicht unterstützt.');
    // Fallback: nur Verbindung schließen
    if (device.opened) await device.close();
    return;
  }
  try {
    await device.forget();
    console.log('Berechtigung entzogen, opened =', device.opened);
  } catch (err) {
    console.error('forget() fehlgeschlagen:', err);
  }
};
Berechtigung entzogen, opened = false

// Wichtig · Fallstricke

  • Browser-Kompatibilität: WebHID ist nur in Chromium-Browsern (Chrome, Edge, Opera) auf dem Desktop verfügbar; forget() ab Version 100. Firefox und Safari unterstützen WebHID nicht – immer per Feature-Erkennung prüfen.
  • Erfordert einen sicheren Kontext (HTTPS oder localhost) und kann per Permissions-Policy hid in iframes gesperrt sein.
  • Die Methode ist nicht in Web Workern aller Browser verfügbar; im Service Worker nur in neueren Chrome-Versionen (Erweiterungen).
  • Nach forget() ist das HIDDevice-Objekt praktisch unbrauchbar; open() schlägt fehl. Verweise darauf solltest du im eigenen Zustand verwerfen.
  • Wurde dasselbe physische Gerät mehrfach als separate Schnittstellen freigegeben, kann forget() die Berechtigung für alle zugehörigen HIDDevice-Objekte entziehen.
  • Für einen reinen Verbindungsabbau ohne Berechtigungsverlust close() verwenden.