שימוש ב-WebHID

מכשיר ממשק אנושי (HID) מקבל קלט מבני אדם או מספק פלט לבני אדם. הוא מתייחס גם לפרוטוקול HID, תקן לתקשורת דו-כיוונית בין מארח למכשיר שנועד לפשט את תהליך ההתקנה.

בדף הזה מתוארים היבטים של ה-API שספציפיים לתוספים. הפרטים המלאים של WebHID API זמינים ב-MDN.

אפשר למצוא אפליקציה לדוגמה ל-WebHID במאגר הדוגמאות.

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

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

הרשאות

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

מניפסט

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

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

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

כשמשתמשים ב-API הזה על ידי קובץ שירות (service worker) תוסף, סשן חיבור המכשירים שומר על הפעילות של ה-Service Worker.

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

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

הקוד הבא עוקב אחרי דפוס טיפוסי, שבו requestDevice() נקרא כחלק מתהליך של בקשת הרשאות שדורש מחווה של המשתמש. כשהמכשיר נרכש, הוא שולח הודעה ל-service worker, שיכול לאחזר את המכשיר באמצעות getDevices().

popup.js:

myButton.addEventListener("click", async () => {
  await navigator.hid.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.hid.getDevices();
    for (const device of devices) {
      // open device connection.
      await device.open();
    }
  }
});