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" });
});
尝试从 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" });
});