Javascript 条形码检测器DomeException:条形码检测服务不可用(在Chrome中)
我们目前正在尝试在最新的Chrome(59)中使用本机。它在启用标志下可用Javascript 条形码检测器DomeException:条形码检测服务不可用(在Chrome中),javascript,google-chrome,dom,qr-code,Javascript,Google Chrome,Dom,Qr Code,我们目前正在尝试在最新的Chrome(59)中使用本机。它在启用标志下可用chrome://flags/#enable-实验性web平台功能 你可以看看另一个例子 我们正在检查本机条形码检测器,如下所示: typeof window.BarcodeDetector === 'function' 但是,即使我们进入这一分支,并最终设法将一些图像数据注入检测器,我们也只能得到一个例外: DOMEException:条码检测服务不可用 我在谷歌上搜索过,但不是很成功。最有希望的提示是,但它似乎是一个
chrome://flags/#enable-实验性web平台功能
你可以看看另一个例子
我们正在检查本机条形码检测器,如下所示:
typeof window.BarcodeDetector === 'function'
但是,即使我们进入这一分支,并最终设法将一些图像数据注入检测器,我们也只能得到一个例外:
DOMEException:条码检测服务不可用
我在谷歌上搜索过,但不是很成功。最有希望的提示是,但它似乎是一个奇怪的Webkit分叉
我们正在做的是以下(伪代码!):
有没有人听说过这一点,并且可以分享一些使用
条码检测器的经验?我在使用桌面版Chrome时也遇到过同样的错误。我想目前它只在移动版本中实现
下面是一个对我有用的例子(安卓5.0.2,Chrome59)chrome://flags/#enable-已启用实验性web平台功能):
在这里恢复一条旧线。
桌面浏览器不支持它,只有移动浏览器支持
这是我的工作代码:
getImage(event) {
let file: File = event.target.files[0];
let myReader: FileReader = new FileReader();
let barcode = window['BarcodeDetector'];
let pdf = new barcode(["pdf417"]);
createImageBitmap(file)
.then(img => pdf.detect(img))
.then(resp => {
alert(resp[0].rawValue);
});
}
这花了一些来回的时间,但是我们终于有了这个API的可靠的特性检测,有关详细信息,请参阅。这是相关的代码片段:
等待条形码检测器。getSupportedFormats();
/*在macOS计算机日志上
[
“阿兹特克”,
“代码128”,
“代码39”,
“代码93”,
“数据矩阵”,
“ean_13”,
“ean_8”,
“创新及科技基金”,
“pdf417”,
“二维码”,
“万国邮联”
]
*/
这允许您检测所需的特定功能,例如二维码扫描:
if((“条形码检测器”在窗口中)&&
((Wait BarcodeDetector.getSupportedFormats())。包括('qr_代码')){
console.log('支持二维码扫描');
}
navigator.mediaDevices.enumerateDevices().then((devices) => {
let id = devices.filter((device) => device.kind === "videoinput").slice(-1).pop().deviceId;
let constrains = {video: {optional: [{sourceId: id }]}};
navigator.mediaDevices.getUserMedia(constrains).then((stream) => {
let capturer = new ImageCapture(stream.getVideoTracks()[0]);
step(capturer);
});
});
function step(capturer) {
capturer.grabFrame().then((bitmap) => {
let canvas = document.getElementById("canvas");
let ctx = canvas.getContext("2d");
ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, canvas.width, canvas.height);
var barcodeDetector = new BarcodeDetector();
barcodeDetector.detect(bitmap)
.then(barcodes => {
document.getElementById("barcodes").innerHTML = barcodes.map(barcode => barcode.rawValue).join(', ');
step(capturer);
})
.catch((e) => {
console.error(e);
});
});
}
getImage(event) {
let file: File = event.target.files[0];
let myReader: FileReader = new FileReader();
let barcode = window['BarcodeDetector'];
let pdf = new barcode(["pdf417"]);
createImageBitmap(file)
.then(img => pdf.detect(img))
.then(resp => {
alert(resp[0].rawValue);
});
}