Web 蓝牙和 Chrome 扩展:用户取消了 requestDevice() 选择器

Web Bluetooth & Chrome Extension: User cancelled the requestDevice() chooser

尝试从 Google Chrome 扩展弹出窗口打开 Web 蓝牙设备选择器对话框时出现以下错误: DOMException: User cancelled the requestDevice() chooser.

我将 TypeScript 和 browserify 与 ES2020 目标、模块和库一起使用。这是从我的 popup.html

运行的代码
document.getElementById("test-button")?.addEventListener("click", async () => {
    await navigator.bluetooth
        .requestDevice({ acceptAllDevices: true })
        .then((device) => {
            alert(device.name);
        })
        .catch((error) => {
            console.error(error); // <- Getting the error here!
        });
});

我假设有一些 Chrome 扩展魔术可以欺骗网络蓝牙认为我点击了对话框,但不知道如何解决这个问题。有什么想法吗?

https://bugs.chromium.org/p/chromium/issues/detail?id=994185 中所述,Web 蓝牙在 Chrome 扩展弹出窗口 windows 中 受支持 windows。

但在 Chrome 扩展“tab/options”页面中受支持,因为它充当常规选项卡。

I haven't tried to reproduce this yet but I believe the issue is that Web Bluetooth doesn't have code to handle creating a permission prompt as a child of an extension popup window. It works for the options page because it is a normal Chrome tab and would also work for a standalone app window.

我的建议是打开一个 Chrome 扩展常规页面,其中包含一些与附近蓝牙设备交互的代码。

// popup.js

button.addEventListener("click", function() {
  // Open a page that contains Javascript to handle Bluetooth devices.
  chrome.tabs.create({ url: "page.html" });
});