本人刚入门 electronjs,很多 API 都很不熟悉;顺便听说这里已经没有真人了,但有趣的事实是,猫一生绝大多数时间都在睡觉!
现象描述
使用 Electron 构建的项目添加官网的示例代码并补充必要内容后运行 electron .,能正常显示界面,但点击官方给出的“Test bluetooth”按钮,无法正常调用蓝牙连接窗口,且报错:Uncaught (in promise) DOMException: User cancelled the requestDevice() chooser.

即使是使用官方的 Electron Fiddle 工具也一样报错:

运行环境
OS: Windows 11 Version 24H2

node: v22.16.0
npm: 10.9.2

package.json:

预期结果
正常来说,调用requestDevice应该弹出窗口,这个报错应该是用户点击取消按钮或者不选择点击窗口外部分取消导致的;
同时,我了解到,既然 Electron 是一个 chromium 套壳工具,且 MDN 上可以查到自 chrome56 开始就已经支持当前报错的 API requestDevice;

且我的电脑主板有蓝牙并已经安装好驱动;

且我自己装了个 chromium138 也能正常调用;


且已知我使用的 Electron 37.2.0 对应的 chromium 版本是 138.7204.97,比我自己装的还高几个修订号;

等情况下,我期望 Electron 打包的应用能够弹出一个窗口让我选择可用的蓝牙设备,然后连接(自动连接已经不奢求了),再不济就去研究 tauri 了。
初步解决思路
回退到旧版本的 Electron 我也已经试过了,最早选了最多人使用的版本 23.3.13,后面 11.5.0 也试过了都不行:

我现在的思路是使用 noble + bluetooth-hci-socket,起码目前只有找不到 USB 设备的报错,所以姑且认为利用 USB 蓝牙去临时解决这个问题是可行的。目前 USB 蓝牙还在路上,等到了再试试。