از WebHID استفاده کنید

یک دستگاه رابط انسانی (HID) ورودی را از انسان دریافت می کند یا خروجی را برای انسان فراهم می کند. همچنین به پروتکل HID اشاره دارد، استانداردی برای ارتباط دو طرفه بین یک میزبان و یک دستگاه که برای ساده کردن مراحل نصب طراحی شده است.

این صفحه جنبه‌هایی از API را که مخصوص برنامه‌های افزودنی است، توضیح می‌دهد. برای جزئیات کامل WebHID API به MDN مراجعه کنید.

می توانید یک برنامه نمونه برای WebHID در مخزن نمونه های ما پیدا کنید.

در دسترس بودن در پسوندها

Chrome 117 یا جدیدتر.

مجوزها

هیچ مجوز فایل مانیفست مورد نیاز نیست. با این حال WebHID جریان مجوز کاربر مرورگر را فعال می کند.

آشکار

هیچ کلید مانیفست برای این API مورد نیاز نیست.

زمینه های حمایتی

این API ممکن است تقریباً در هر زمینه ای مورد استفاده قرار گیرد. روش WebHID.requestDevice() را نمی توان در کارکنان خدمات توسعه استفاده کرد. برای جزئیات بیشتر به بخش بعدی مراجعه کنید.

هنگامی که این API در یک سرویس دهنده برنامه افزودنی استفاده می شود، جلسه اتصال دستگاه ها سرویس دهنده را زنده نگه می دارد.

تفاوت های افزونه کروم

اگرچه WebHID برای کارکنان خدمات برنامه افزودنی در دسترس است، WebHID.requestDevice() که وعده ای را برمی گرداند که با یک نمونه HIDDevice حل می شود، نمی تواند در یک کارگر سرویس افزودنی فراخوانی شود. برای حل این مشکل، requestDevice() از یک صفحه افزونه غیر از کارمند سرویس توسعه فراخوانی کنید و پیامی را به کارگر سرویس توسعه ارسال کنید.

کد زیر از یک الگوی معمولی پیروی می کند و با فراخوانی requestDevice() به عنوان بخشی از یک جریان مجوزها که به ژست کاربر نیاز دارد، عمل می کند. هنگامی که دستگاه به دست می آید، پیامی به سرویس دهنده ارسال می کند، که سپس می تواند دستگاه را با استفاده از 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();
    }
  }
});