Web Bluetooth 通过 requestLEScan() 异步监听 BLE 广播包,不建立连接、纯事件驱动,需用户手势触发且仅支持 HTTPS 及 Chromium 内核浏览器;扫描持续派发 advertisementreceived 事件,携带设备名、RSSI、厂商数据、服务数据等完整广播信息,并支持过滤、去重等配置,须显式调用 .stop() 终止。
Web Bluetooth 的扫描能力不依赖用户手动选择设备,而是通过
异步监听广播包,直接获取原始 BLE 广告数据(如名称、RSSI、服务 UUID、制造商数据等)。关键在于它不建立连接,只“听”设备在广播信道上发出的信号。
启动基础异步扫描
调用
后立即返回一个
对象,扫描过程在后台持续运行,无需等待设备列表生成。整个流程是纯事件驱动的:
必须由用户手势(如点击)触发,不能自动执行
需 HTTPS 环境(
也允许)
仅 Chromium 内核浏览器支持(Chrome ≥ 56、Edge ≥ 79)
扫描启动后,系统会持续派发
事件
监听原始广播数据
每个
事件携带完整广播载荷,包括未解析的原始字节和结构化解析字段:
:设备广播名(可能为空或被截断)
:接收信号强度(负值,单位 dBm),用于粗略估算距离
:厂商自定义数据(
对象),需按厂商协议解析
:按服务 UUID 组织的键值对,例如
:广播中声明的服务 UUID 列表(字符串数组)
配置扫描行为以适配场景
通过
控制扫描粒度与资源消耗:
—— 接收所有广播,适合发现未知设备
—— 按名称前缀或服务 UUID 预筛选,减少事件量
—— 同一设备重复广播只触发一次事件(默认为
)
—— 仅监听已获用户授权的设备(需先调用
授权过)
停止与清理
扫描不会自动终止,必须显式调用
:
推荐搭配
设置超时(如 10 秒),避免长期占用蓝牙资源
调用
后,不再触发
事件
若页面卸载前未停止,浏览器通常会自动清理,但主动管理更可靠
requestLEScan()requestLEScan()BluetoothLEScanlocalhostadvertisementreceivedadvertisementreceivedevent.device.nameevent.rssievent.advertisementData.manufacturerData DataView event.advertisementData.serviceData{'0000feaa-0000-1000-8000-00805f9b34fb': DataView}event.advertisementData.serviceUuidsBluetoothLEScanOptionsacceptAllAdvertisements: truefilters: [{ namePrefix: 'Temp' }, { services: ['battery_service'] }]keepRepeatedDevices: falsefalselistenOnlyGrantedDevices: truerequestDevice().stop()setTimeoutscan.stop()advertisementreceived