استخدام WebUSB

تعرض WebUSB API الأجهزة المتوافقة مع الناقل التسلسلي العالمي (USB) غير العادية على الويب. تصف هذه الصفحة جوانب واجهة برمجة التطبيقات الخاصة بالإضافات. راجِع MDN لمعرفة التفاصيل الكاملة عن WebUSB API.

مدى التوفّر في الإضافات

الإصدار 118 من Chrome أو الإصدارات الأحدث

الأذونات

لا يلزم الحصول على أذونات ملف البيان؛ ومع ذلك، يؤدي WebUSB إلى تشغيل تدفق أذونات المستخدم في المتصفح.

البيان

لا حاجة إلى مفاتيح بيان لواجهة برمجة التطبيقات هذه.

السياقات الداعمة

يمكن استخدام واجهة برمجة التطبيقات هذه في أي سياق تقريبًا، ولا يمكن استخدام الطريقة WebUSB.requestDevice() في مشغّلات خدمات الإضافات. يُرجى الاطلاع على القسم التالي للحصول على التفاصيل.

عند استخدام واجهة برمجة التطبيقات هذه في عامل خدمة إضافة، تحافظ جلسة اتصال الأجهزة على استمرار عمل عامل الخدمة.

الاختلافات بين إضافات Chrome

على الرغم من توفّر WebUSB لمشغّلي خدمات الإضافات، لا يمكن استدعاء WebUSB.requestDevice() في مشغّل خدمات الإضافة، لأنّه يعرض وعدًا يتم حلّه باستخدام مثيل USBDevice. لتفادي هذه المشكلة، يمكنك الاتصال بالرقم requestDevice() من صفحة إضافة غير عامل خدمات الإضافات وإرسال رسالة إلى مشغّل خدمات الإضافات.

يتّبع الرمز البرمجي التالي نمطًا نموذجيًا من خلال استدعاء requestDevice() كجزء من عملية الحصول على الأذونات التي تتطلّب إيماءة من المستخدم. عند الحصول على الجهاز، يرسل رسالة إلى مشغّل الخدمة الذي يمكنه بعد ذلك استرداد الجهاز باستخدام 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();
    }
  }
});