web bluetooth api在chrome中不可用,因仅支持https或localhost安全上下文;file://协议下navigator.bluetooth为undefined,且requestdevice()须由用户手势触发并配有效filters或acceptalldevices:true。

Web Bluetooth API 在 Chrome 中无法调用 navigator.bluetooth
不是代码写错了,而是环境没达标:Web Bluetooth 仅在 HTTPS(或 localhost)下可用,HTTP 页面会直接报 navigator.bluetooth is undefined。开发时用 http://localhost:8080 没问题,但一旦部署到非 HTTPS 域名(比如 http://mytest.com),navigator.bluetooth 就彻底不可见。
常见踩坑点:
- 本地双击打开 HTML 文件(
file://协议)——navigator.bluetooth一定为undefined - Vite / Webpack Dev Server 默认启用了 HTTPS?不,它默认是 HTTP,需显式配置
https: true或加--https启动 - GitHub Pages 默认只有 HTTPS,但若用自定义域名且未启用强制 HTTPS,也可能失效
调用 requestDevice() 后页面卡住或无响应
这是权限和过滤器配置不当的典型表现。requestDevice() 是用户手势触发的异步操作(必须由 click、tap 等触发),且默认不显示任何设备——除非你明确告诉浏览器“要连什么”。
正确做法是传入有效 filters 或 optionalServices:
- 只写
{}或空数组 → 浏览器可能不弹窗(尤其在 Android Chrome 上) - 想扫描所有 BLE 设备?至少加
acceptAllDevices: true(但 iOS Safari 不支持,且部分安卓厂商限制) - 连特定设备?用
filters: [{ namePrefix: "MySensor" }]或filters: [{ services: ["battery_service"] }] - 连上后读特征值前,必须先调用
device.gatt.connect(),否则后续操作全失败
characteristic.readValue() 报错 NetworkError 或 UnknownError
这不是网络问题,而是 GATT 通信链路未就绪。BLE 读写必须满足三个前提:
-
device.gatt.connected === true(连接已建立) -
service = await device.gatt.getPrimaryService("your_service_uuid")已成功获取服务 -
characteristic = await service.getCharacteristic("your_char_uuid")已成功获取特征值,且该特征值的properties.read === true
容易忽略的一点:某些设备要求先 characteristic.startNotifications() 才允许读,或者需要先写一个启用命令(如向 0x2902 描述符写 0x0100)。可先用 nRF Connect App 验证设备行为,再照搬逻辑。
Android Chrome 连不上设备,但桌面 Chrome 可以
Android 端限制更严:从 Chrome 89 起,requestDevice() 必须在顶层浏览上下文中触发(不能在 iframe 里),且需开启系统级蓝牙权限(Chrome 自己不会申请,得用户手动去「设置 > 应用 > Chrome > 权限」里开「位置信息」——因为 Android 用定位权限辅助 BLE 扫描)。
调试建议:
- 确认手机已开启蓝牙 + 定位服务(即使不使用 GPS)
- 检查 Chrome 是否被系统休眠/后台限制(关闭省电模式或加入白名单)
- 避免使用
name过滤(如{ name: "ABC" }),改用namePrefix或services,因广播名可能被截断或未包含在扫描响应中 - 某些国产 ROM(如 MIUI、EMUI)会深度限制后台 BLE 扫描,真机测试务必用原生 Android 或 Pixel 设备交叉验证
Web Bluetooth 不是“一次写完到处跑”的接口,设备兼容性、系统策略、运行时权限三者缺一不可。最稳的做法:始终检查每一步返回值,对每个 Promise 做 catch,并把 console.error 里的具体错误码(如 "GATT operation not permitted")当成关键线索来查。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











