Web Serial API は、デスクトップ版 Chrome 117 以降で、ペア設定された Bluetooth Classic デバイスの RFCOMM サービスとの通信をサポートしています。たとえば、ワイヤレス イヤホンは RFCOMM を使用して音声設定やファームウェア アップデートを管理できます。詳しくは、Bluetooth 経由のシリアル通信をご覧ください。
パソコン版 Chrome 130 では、Web Serial API が改善され、ウェブアプリはポートを開かなくても Bluetooth RFCOMM シリアル ポートが使用可能かどうかを検出できるようになりました。これにより、ワイヤレス デバイスが意図的に切断されたときに不要な再接続を防ぐことができます。
ワイヤレス デバイスがホストの範囲外になると、ウェブアプリによって開かれたワイヤレス シリアルポートは自動的に閉じます。このような場合、ウェブアプリは SerialPort open()
メソッドでポートの再オープンを試みることがあります。ただし、ワイヤレス デバイスが意図的に切断された場合(ユーザーがオペレーティング システムのコントロール パネルから切断した場合など)、ウェブアプリはポートを再び開かないようにし、ワイヤレス デバイスへの再接続を防ぐ必要があります。
新しいブール値 SerialPort connected
属性を使用して、ワイヤレス シリアルポートをホストするワイヤレス デバイスの論理接続状態を公開することで、ウェブアプリはこれらのケースを区別し、意図しない切断の場合にのみ再接続できるようになりました。
ポートをホストするワイヤレス デバイスがシステムにアクティブな接続を持っている場合、ワイヤレス シリアルポートの SerialPort connected
属性は true になります。有線シリアルポートの場合、ポートがシステムに物理的に接続されている場合は true です。
次のスニペットは、利用可能なデバイスを確認して、自動的に接続する方法を示しています。
const ports = await navigator.serial.getPorts();
for (const port of ports) {
if (port.connected) {
// Automatically try to connect to the Bluetooth device.
await port.open({ baudRate: 9600 });
} else {
// Otherwise, when the port is not logically connected:
// 1. Prompt the user to make sure the Bluetooth device is available.
// 2. Show a "connect" button to try opening the port.
}
}
以前は、有線シリアルポートのみが接続イベントと切断イベントをディスパッチしていました。Bluetooth RFCOMM シリアルポートが、ポートが論理的に接続または切断されたときに、これらのイベントをディスパッチするようになりました。
デモ
リソース
謝辞
レビューを投稿していただいた Jack Hsieh 様、Reilly Grant 様、ありがとうございます。