Interfejs WebUSB API udostępnia w internecie niestandardowe urządzenia zgodne z uniwersalną magistralą szeregową (USB). Na tej stronie opisaliśmy aspekty interfejsu API, które dotyczą głównie rozszerzeń. Pełne informacje o interfejsie WebUSB API znajdziesz w dokumentacji MDN.
Dostępność w rozszerzeniach
Chrome 118 lub nowsza.
Uprawnienia
Uprawnienia do pliku manifestu nie są wymagane. jednak WebUSB wyzwala przepływ zgody użytkownika w przeglądarce.
Plik manifestu
W przypadku tego interfejsu API nie są potrzebne klucze manifestu.
Konteksty obsługiwane
Można go używać w prawie każdym kontekście; Metody WebUSB.requestDevice()
nie można używać w instancjach roboczych usługi rozszerzenia. Więcej informacji na ten temat można znaleźć w następnej sekcji.
Jeśli ten interfejs API jest używany w skrypcie service worker rozszerzenia, sesja połączenia urządzenia utrzymuje aktywny skrypt service worker.
Różnice między rozszerzeniami do Chrome
Interfejs WebUSB jest dostępny dla skryptów service worker usługi rozszerzeń, ale w skrypcie nie można wywołać funkcji WebUSB.requestDevice()
, która zwraca obietnicę, która jest rozwiązywana za pomocą instancji USBDevice. Aby obejść ten problem, wywołaj requestDevice()
z poziomu strony rozszerzenia innej niż skrypt service worker i wyślij wiadomość do skryptu service worker.
Poniższy kod jest zgodny z typowym wzorcem i wywołuje funkcję requestDevice()
w ramach procesu uzyskiwania uprawnień wymagającego działania użytkownika. Gdy urządzenie zostanie pobrane, wysyła wiadomość do usługi, która może je następnie pobrać za pomocą getDevices()
.
popup.js:
myButton.addEventListener("click", async () => {
await navigator.usb.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.usb.getDevices();
for (const device of devices) {
// open device connection.
await device.open();
}
}
});