Urządzenie HID (Human Interface Device) odbiera dane od użytkowników lub przekazuje je użytkownikom. Odnosi się też do protokołu HID, czyli standardu dwukierunkowej komunikacji między hostem a urządzeniem, który ma na celu uproszczenie procedury instalacji.
Na tej stronie opisujemy aspekty interfejsu API odnoszące się do rozszerzeń. Szczegółowe informacje o interfejsie WebHID API znajdziesz w MDN.
Przykładową aplikację do obsługi WebHID znajdziesz w repozytorium przykładów.
Dostępność w rozszerzeniach
Chrome 117 lub nowsza.
Uprawnienia
Nie są wymagane żadne uprawnienia pliku manifestu, ale WebHID uruchamia proces uzyskiwania przez użytkownika uprawnień w przeglądarce.
Plik manifestu
W przypadku tego interfejsu API nie są potrzebne żadne klucze manifestu.
Konteksty dodatkowe
Ten interfejs API może być używany w prawie każdym kontekście. Metody WebHID.requestDevice()
nie można używać w workerach rozszerzenia. Więcej informacji na ten temat można znaleźć w następnej sekcji.
Gdy ten interfejs API jest używany w workerze usługi rozszerzenia, sesja połączenia z urządzeniami utrzymuje workera usługi w stanie aktywnym.
Różnice między rozszerzeniami do Chrome
Chociaż mechanizm WebHID jest dostępny dla mechanizmów Service Worker rozszerzenia, zwracający obietnicę rozwiązaną w przypadku instancji HIDDevice nie można wywołać w skrypcie service worker rozszerzenia.WebHID.requestDevice()
Aby to obejść, wywołaj funkcję requestDevice()
na stronie rozszerzenia innej niż skrypt service worker rozszerzenia i wyślij wiadomość do skryptu service worker rozszerzenia.
Poniższy kod jest zgodny z typowym wzorcem i wywołuje funkcję requestDevice()
w ramach procesu uzyskiwania uprawnień wymagającego działania użytkownika. Po pobraniu urządzenia wysyła ono wiadomość do skryptu service worker, który może następnie pobrać urządzenie za pomocą 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();
}
}
});