USB: requestDevice() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:此功能在 Web Workers 中可用。

requestDevice()USB 介面的一個方法,如果找到指定的裝置,它會返回一個 Promise,該 Promise 會解析為 USBDevice 例項。呼叫此函式會觸發使用者代理的配對流程。

語法

js
requestDevice(options)

引數

options

一個用於設定選擇合適裝置選項的物件。可用選項包括:

filters

一個過濾器物件陣列,用於匹配您想要配對的可能裝置。每個過濾器物件可以包含以下屬性:

  • vendorId
  • productId
  • classCode
  • subclassCode
  • protocolCode
  • serialNumber

返回值

一個 Promise,它會解析為 USBDevice 例項。

安全

需要瞬時使用者啟用。使用者必須與頁面或 UI 元素進行互動才能使此功能正常工作。

示例

下面的示例查詢兩種 USB 裝置之一。請注意,指定了兩個產品 ID。它們都被傳遞給了 requestDevice()。這會觸發使用者代理流程,提示使用者選擇一個裝置進行配對。只有選定的裝置才會被傳遞給 then()

過濾器的數量並不決定使用者代理顯示的裝置數量。例如,如果只找到一個產品 ID 為 0xa800 的 USB 裝置,那麼使用者代理只會列出這一個裝置。另一方面,如果使用者代理找到第一個列出的裝置有兩個,第二個裝置有一個,那麼所有三個裝置都會被列出。

js
const filters = [
  { vendorId: 0x1209, productId: 0xa800 },
  { vendorId: 0x1209, productId: 0xa850 },
];
navigator.usb
  .requestDevice({ filters })
  .then((usbDevice) => {
    console.log(`Product name: ${usbDevice.productName}`);
  })
  .catch((e) => {
    console.error(`There is no device. ${e}`);
  });

規範

規範
WebUSB API
# dom-usb-requestdevice

瀏覽器相容性