Javascript 条形码检测器DomeException:条形码检测服务不可用(在Chrome中)

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(59)中使用本机。它在启用标志下可用
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);
   });
}