WebHID'yi kullan

İnsan Arayüz Cihazı (HID), insanlardan giriş alır veya insanlara çıkış sağlar. Ana makine ile cihaz arasında çift yönlü iletişim standardı olan ve kurulum işlemini basitleştirmek için tasarlanan HID protokolünü de ifade eder.

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

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

Uzantılarda kullanılabilirlik

Chrome 117 veya sonraki sürümler.

İzinler

Manifest dosyası izinleri gerekli değildir, 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 neredeyse her bağlamda kullanılabilir. WebHID.requestDevice() yöntemi, uzantı hizmet çalışanlarında kullanılamaz. Ayrıntılar için sonraki bölüme bakabilirsiniz.

Bu API bir uzantı hizmet çalışanında kullanıldığında, cihazların bağlantı oturumu hizmet çalışanının aktif kalmasını sağlar.

Chrome uzantısı farklılıkları

WebHID, uzantı hizmet çalışanları tarafından kullanılabilir ancak HIDDevice örneğiyle çözümlenen bir vaat döndüren WebHID.requestDevice(), uzantı hizmet çalışanında çağrılamaz. Bu sorunu gidermek için uzantı hizmet çalışanı dışında bir uzantı sayfasından requestDevice() numaralı telefonu arayın ve uzantı hizmet çalışanına bir mesaj gönderin.

Aşağıdaki kod, kullanıcı hareketi gerektiren bir izin akışının parçası olarak requestDevice() yöntemini çağırarak tipik bir kalıbı izler. Cihaz edinildiğinde Service Worker'a bir mesaj gönderilir ve daha sonra hizmet çalışanı getDevices() ile 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();
    }
  }
});