שימוש ב-WebUSB

ממשק ה-API של WebUSB חושף לאינטרנט מכשירים לא סטנדרטיים שתואמים לאפיק הטורי האוניברסלי (USB). בדף הזה מתוארים היבטים ספציפיים של ה-API לתוספים. פרטים מלאים על WebUSB API זמינים ב-MDN.

זמינות בתוספים

Chrome מגרסה 118 ואילך.

הרשאות

לא נדרשות הרשאות לקובץ המניפסט, אבל WebUSB מפעיל את תהליך הבקשה להרשאות משתמש בדפדפן.

מניפסט

אין צורך במפתחות מניפסט ל-API הזה.

הקשרים תומכים

אפשר להשתמש ב-API הזה כמעט בכל הקשר. לא ניתן להשתמש בשיטה WebUSB.requestDevice() ב-service worker. למידע נוסף, עיין בקטע הבא.

כשמשתמשים ב-API הזה ב-service worker של תוסף, סשן החיבור של המכשירים שומר על ה-service worker פעיל.

הבדלים בתוספים ל-Chrome

WebUSB זמין לקובצי שירות של תוספים, אבל אי אפשר להפעיל את WebUSB.requestDevice() בקובץ שירות של תוסף. הפונקציה הזו מחזירה הבטחה (promise) שמתקבלת בה מכונה של USBDevice. כדי לפתור את הבעיה, צריך להתקשר אל requestDevice() מדף של תוסף שהוא לא ה-API של שירות התוסף ולשלוח הודעה לעובדי שירות התוסף.

הקוד הבא פועל לפי דפוס אופייני של קריאה ל-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();
    }
  }
});