שימוש ב-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();
    }
  }
});