WebUSB API חושף בפני האינטרנט התקנים לא סטנדרטיים התואמים ל-Universal Serial אפיק (USB). בדף הזה מתוארים היבטים של ממשק ה-API שרלוונטיים לתוספים. ב-MDN מופיעים הפרטים המלאים של WebUSB API.
זמינות בתוספים
Chrome מגרסה 118 ואילך.
הרשאות
לא נדרשות הרשאות לקובץ מניפסט; עם זאת, WebUSB מפעיל את תהליך הרשאת המשתמש של הדפדפן.
מניפסט
אין צורך במפתחות מניפסט ל-API הזה.
הקשרים תומכים
ניתן להשתמש ב-API הזה כמעט בכל הקשר. לא ניתן להשתמש בשיטה WebUSB.requestDevice()
ב-Service Workers של תוספים. למידע נוסף, עיין בקטע הבא.
כאשר נעשה שימוש ב-API הזה ב-Service Worker של תוסף, סשן החיבור של המכשיר משאיר את קובץ השירות פעיל.
הבדלים בין תוספים ל-Chrome
על אף ש-WebUSB זמין לעובדי שירות של תוסף, לא ניתן לקרוא ל-Service Worker של תוסף WebUSB.requestDevice()
, שמחזיר הבטחה שנפתרת עם מכונת USBDevice. כדי לעקוף את הבעיה, יש להתקשר אל requestDevice()
מדף של תוסף שאינו ה-service worker של התוסף, ולשלוח הודעה ל-service worker של התוסף.
הקוד הבא בנוי לפי דפוס אופייני. הוא מבצע קריאה ל-requestDevice()
כחלק מתהליך ההרשאות, שמחייב תנועה של משתמש. לאחר רכישת המכשיר, הוא שולח הודעה ל-Service Worker, שמסוגל לאחזר את המכשיר באמצעות 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();
}
}
});