从移动浏览器扫描Angular2 + QR码

时间:2017-07-10 13:00:13

标签: android ios angular windows-phone qr-code

我正在研究使用Android,iOS和Windows Phone上的浏览器扫描QR码的可行方法。理想的解决方案是拥有一个Angular2 +响应式应用程序,可以在移动设备和全尺寸计算机屏幕上使用。整个应用程序应该是基于QR码贴纸标识项目的某种库存。

我找到了一个不错的组件https://github.com/goergch/angular2-qrscanner,但它在我手机上的任何浏览器上都不起作用(Firefox,Chrome,HTC浏览器,Dolphin)。不幸的是,如果支持任何移动浏览器,则没有任何信息。

有没有人知道我可以为此目的测试的库/组件?或者我应该忘记它并使用Ionic(或者可能是NativeScript)构建系统并编译本机应用程序?

提前感谢您提出的所有建议。

1 个答案:

答案 0 :(得分:3)

经过2天的调试后,我刚刚在Android上工作了。首先,它需要运行SSL以便能够访问您的deivce的相机(这是Android和Chrome和FF的最新版本中的一项要求)。但实质上,它在Android上工作的错误归结为用于从相机的视频源生成图像的画布的尺寸。您传入的值实际上用于您在设备上看到的视频元素。然而,它是一个隐藏的画布元素,用于从视频流生成图像,然后分析有效的QR码。在移动设备上,这个canvas元素被夸大到了很大的尺寸,忽略了你传递给组件的内容。因此,使用传入尺寸的扫描仅扫描现在巨型画布中渲染的图像的一小部分。

修复是为了确保您将值传递给可以在智能手机屏幕上呈现的组件模板,例如320 x 480。然后在组件css文件中强制对canvas元素进行此限制。

因此,组件模板应具有以下内容: ...

<qr-scanner
(onRead)="captureScan($event)"
facing="environment"
[mirror]="true"
[stopAfterScan]="true"
[updateTime]="1000"
[canvasWidth]="320"
[canvasHeight]="480"
></qr-scanner>

...

在你的css文件中: ...

canvas {
    width: 320px !important;
    height: 480px !important;
}

...

此修复程序现在适用于Chrome&amp;在Android上的FF。