Urządzenie HID (ang. Human Interface Device) pobiera dane wejściowe od ludzi lub dostarcza je użytkownikom. Odnosi się również do protokołu HID – standardu dwukierunkowej komunikacji między hostem a urządzeniem, który ma na celu uproszczenie procedury instalacji.
Na tej stronie opisaliśmy aspekty interfejsu API, które są charakterystyczne dla rozszerzeń. Szczegółowe informacje o interfejsie WebHID API znajdziesz w MDN.
Przykładowa aplikacja na platformę WebHID znajdziesz w naszym repozytorium przykładów.
Dostępność w rozszerzeniach
Chrome w wersji 117 lub nowszej.
Uprawnienia
Żadne uprawnienia do pliku manifestu nie są wymagane, ale WebHID uruchamia przepływ uprawnień użytkownika w przeglądarce.
Plik manifestu
Ten interfejs API nie wymaga kluczy manifestu.
Konteksty pomocnicze
Tego interfejsu API można używać niemal w każdym kontekście. Metody WebHID.requestDevice()
nie można używać w skryptach service worker rozszerzenia. Więcej informacji na ten temat można znaleźć w następnej sekcji.
Gdy ten interfejs API jest używany w skrypcie service worker rozszerzenia, sesja połączenia z urządzeniem podtrzymuje jego aktywność.
Różnice dotyczące rozszerzeń do Chrome
Chociaż protokół WebHID jest dostępny dla mechanizmów skryptu service worker rozszerzenia, nie można wywołać metody WebHID.requestDevice()
, która zwraca obietnicę rozwiniętą za pomocą instancji HIDDevice, nie można jej wywołać w skrypcie usługi rozszerzenia. Aby obejść ten problem, wywołaj połączenie requestDevice()
ze strony rozszerzenia innej niż skrypt service worker i wyślij do niego wiadomość.
Ten kod działa zgodnie ze standardowym wzorcem – wywołuje funkcję requestDevice()
w ramach procesu przyznawania uprawnień, które wymaga gestu użytkownika. Po pobraniu urządzenie wysyła komunikat do skryptu service worker, który może pobrać urządzenie przy użyciu 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();
}
}
});