WebHID'yi kullan

İnsan arayüz cihazı (HID), insanlardan girdi alır veya insanlara çıkış sağlar. Ayrıca, kurulum işlemini basitleştirmek için tasarlanmış, ana makine ile cihaz arasında iki yönlü iletişim için standart olan HID protokolünü de ifade eder.

Bu sayfada, API'nın uzantılara özgü özellikleri açıklanmaktadır. WebHID API ile ilgili tüm ayrıntılar için MDN'ye bakın.

Örnek depomuzda WebHID için örnek bir uygulama bulabilirsiniz.

Uzantılarda kullanılabilirlik

Chrome 117 veya sonraki sürümler.

İzinler

Manifest dosyası izni gerekmez ancak WebHID, tarayıcının kullanıcı izni akışını tetikler.

Manifest

Bu API için manifest anahtarı gerekmez.

Destekleyici bağlamlar

Bu API hemen hemen her bağlamda kullanılabilir. WebHID.requestDevice() yöntemi, uzantı hizmet işçilerinde kullanılamaz. Ayrıntılar için sonraki bölüme bakabilirsiniz.

Bu API, bir uzantı hizmet işçisinde kullanıldığında cihaz bağlantı oturumu, hizmet işçisini etkin durumda tutar.

Chrome uzantısı farklılıkları

WebHID, uzantı hizmet çalışanları tarafından kullanılabilir olsa da HIDDevice örneğiyle çözülen bir promise döndüren WebHID.requestDevice(), uzantı hizmet çalışanında çağrılamaz. Bu sorunun üstesinden gelmek için uzantı hizmet çalışanı dışında bir uzantı sayfasından requestDevice()'ü çağırın ve uzantı hizmet çalışanına bir mesaj gönderin.

Aşağıdaki kod, kullanıcı hareketi gerektiren bir izin akışı kapsamında requestDevice()'ü çağırarak tipik bir kalıbı izler. Cihaz edinildiğinde hizmet işleyiciye bir mesaj gönderilir. Hizmet işleyici, getDevices() kullanarak cihazı alabilir.

popup.js:

myButton.addEventListener("click", async () => {
  await navigator.hid.requestDevice({
    filters: [{ vendorId: 0x1234, productId: 0x5678 }],
  });
  chrome.runtime.sendMessage("newDevice");
});

service-worker.js

chrome.runtime.onMessage.addListener(async (message) => {
  if (message === "newDevice") {
    const devices = await navigator.hid.getDevices();
    for (const device of devices) {
      // open device connection.
      await device.open();
    }
  }
});