Web Serial API

可用性有限

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

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

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

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

Web Serial API 提供了一種允許網站讀取和寫入序列裝置的方式。這些裝置可能透過序列埠連線,也可能是模擬序列埠的 USB 或藍牙裝置。

概念與用法

Web Serial API 是一組允許網站與連線到使用者計算機的外圍裝置通訊的 API 之一。它提供了連線到作業系統要求透過序列 API 進行通訊的裝置的能力,而不是透過 WebUSB API 訪問的 USB,或者透過 WebHID API 訪問的輸入裝置。

序列裝置的例子包括 3D 印表機和微控制器,例如 BBC micro:bit 板

介面

Serial Experimental

提供用於從網頁查詢和連線序列埠的屬性和方法。

SerialPort Experimental

提供對主機裝置上的序列埠的訪問。

其他介面的擴充套件

返回一個 Serial 物件,該物件代表 Web Serial API 的入口點,用於啟用序列埠的控制。

WorkerNavigator.serial Read only Experimental

返回一個 Serial 物件,該物件代表 Web Serial API 的入口點,用於啟用序列埠的控制。

HTTP 標頭

Permissions-Policy serial 指令

控制當前文件是否允許使用 Web Serial API 與序列裝置通訊,這些裝置可以直接透過序列埠連線,或者透過模擬序列埠的 USB 或藍牙裝置。

示例

以下示例演示了 Web Serial API 提供的一些功能。

檢查可用埠

以下示例顯示瞭如何檢查可用埠,並允許使用者授予其訪問其他埠的許可權。

connectdisconnect 事件允許網站在裝置連線或斷開系統時做出響應。然後呼叫 getPorts() 方法來檢視網站已獲得訪問許可權的已連線埠。

如果網站沒有訪問任何已連線埠的許可權,它必須等到使用者啟用才能繼續。在本示例中,我們使用按鈕上的 click 事件處理程式來完成此任務。將過濾器傳遞給 requestPort(),其中包含 USB 供應商 ID,以將顯示給使用者的裝置集限制為僅由特定製造商製造的 USB 裝置。

js
navigator.serial.addEventListener("connect", (e) => {
  // Connect to `e.target` or add it to a list of available ports.
});

navigator.serial.addEventListener("disconnect", (e) => {
  // Remove `e.target` from the list of available ports.
});

navigator.serial.getPorts().then((ports) => {
  // Initialize the list of available ports with `ports` on page load.
});

button.addEventListener("click", () => {
  const usbVendorId = 0xabcd;
  navigator.serial
    .requestPort({ filters: [{ usbVendorId }] })
    .then((port) => {
      // Connect to `port` or add it to the list of available ports.
    })
    .catch((e) => {
      // The user didn't select a port.
    });
});

從埠讀取資料

以下示例顯示瞭如何從埠讀取資料。外部迴圈處理非致命錯誤,建立一個新的讀取器,直到遇到致命錯誤並且 SerialPort.readable 變為 null

js
while (port.readable) {
  const reader = port.readable.getReader();
  try {
    while (true) {
      const { value, done } = await reader.read();
      if (done) {
        // |reader| has been canceled.
        break;
      }
      // Do something with |value|...
    }
  } catch (error) {
    // Handle |error|...
  } finally {
    reader.releaseLock();
  }
}

規範

規範
Web Serial API
# serial-interface

瀏覽器相容性

另見