שימוש ב-WebUSB

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