Gunakan WebHID

Human Interface Device (HID) mengambil input dari atau memberikan output ke manusia. Ini juga mengacu pada protokol HID, standar komunikasi dua arah antara host dan perangkat yang dirancang untuk menyederhanakan prosedur pemasangan.

Halaman ini menjelaskan aspek API yang spesifik untuk ekstensi. Lihat MDN untuk mengetahui detail selengkapnya tentang WebHID API.

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

Ketersediaan dalam ekstensi

Chrome 117 atau yang lebih baru.

Izin

Tidak ada izin file manifes yang 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 dalam pekerja layanan ekstensi. Lihat bagian berikutnya untuk detail lebih lanjut.

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

Perbedaan ekstensi Chrome

Meskipun WebHID tersedia untuk pekerja layanan ekstensi, WebHID.requestDevice(), yang menampilkan promise yang diselesaikan dengan instance HIDDevice, tidak dapat dipanggil dalam 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 perangkat diperoleh, perangkat akan mengirimkan 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");
});

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