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

رابط برنامه‌نویسی کاربردی وب‌یواس‌بی (WebUSB API) دستگاه‌های سازگار با گذرگاه سریال جهانی (USB) غیر استاندارد را در وب نمایش می‌دهد. این صفحه جنبه‌هایی از رابط برنامه‌نویسی کاربردی (API) را که مختص افزونه‌ها هستند، شرح می‌دهد. برای جزئیات کامل رابط برنامه‌نویسی کاربردی وب‌یواس‌بی به MDN مراجعه کنید.

در دسترس بودن در افزونه‌ها

کروم ۱۱۸ یا بالاتر.

مجوزها

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

مانیفست

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

زمینه‌های پشتیبانی

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

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

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

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

کد زیر از یک الگوی معمول با فراخوانی requestDevice() به عنوان بخشی از جریان مجوزها که نیاز به یک حرکت کاربر دارد، پیروی می‌کند. هنگامی که دستگاه دریافت می‌شود، پیامی به service worker ارسال می‌شود که می‌تواند با استفاده از getDevices() دستگاه را بازیابی کند.

فایل popup.js:

myButton.addEventListener("click", async () => {
  await navigator.usb.requestDevice({
    filters: [{ vendorId: 0x1234, productId: 0x5678 }],
  });
  chrome.runtime.sendMessage("newDevice");
});

سرویس-ورکر.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();
    }
  }
});