Gunakan WebHID

Perangkat Antarmuka Manusia (HID) mengambil input dari atau memberikan output kepada manusia. Istilah ini juga mengacu pada protokol HID, yaitu standar untuk komunikasi dua arah antara host dan perangkat yang dirancang untuk menyederhanakan prosedur penginstalan.

Halaman ini menjelaskan aspek API yang khusus untuk ekstensi. Lihat MDN untuk detail lengkap tentang WebHID API.

Anda dapat menemukan aplikasi contoh untuk WebHID di repositori contoh kami.

Ketersediaan di ekstensi

Chrome 117 atau yang lebih baru.

Izin

Izin file manifes tidak diperlukan; tetapi WebHID memicu alur izin pengguna browser.

Manifes

Tidak ada kunci manifes yang diperlukan untuk API ini.

Konteks pendukung

API ini dapat digunakan di hampir semua konteks. Metode WebHID.requestDevice() tidak dapat digunakan di pekerja layanan ekstensi. Lihat bagian berikutnya untuk detail lebih lanjut.

Saat API ini digunakan di pekerja layanan ekstensi, sesi koneksi perangkat akan membuat pekerja layanan tetap aktif.

Perbedaan ekstensi Chrome

Meskipun WebHID tersedia untuk pekerja layanan ekstensi, WebHID.requestDevice(), yang menampilkan promise yang di-resolve dengan instance HIDDevice, tidak dapat dipanggil di pekerja layanan ekstensi. Untuk mengatasi hal ini, panggil requestDevice() dari halaman ekstensi selain pekerja layanan ekstensi dan kirim pesan ke pekerja layanan ekstensi.

Kode berikut mengikuti pola umum dengan memanggil requestDevice() sebagai bagian dari alur izin yang memerlukan gestur pengguna. Saat diperoleh, perangkat akan mengirim pesan ke pekerja layanan, yang kemudian dapat mengambil perangkat menggunakan getDevices().

popup.js:

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

pekerja layanan.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();
    }
  }
});