在生产中,zxing / ngx-scanner可在Safari中工作,但不能在Chrome中工作

时间:2019-11-13 21:59:39

标签: angular google-chrome safari zxing

错误 尽管使用HTTPS,Chrome仍无法打开zxing / ngx-scanner并在尝试这样做时收到此错误:@zxing/ngx-scanner Error when asking for permission. DOMException: Permission denied. 但是,它可以在Safari中完美运行。 Safari询问是否可以访问相机,并在获得许可后一切正常。

我使用了Stackblitz的样板代码zxing,此breaking change文档以及其他地方的代码,例如Angular 8 component.html中的<zxing-scanner></zxing-scanner>。即使是简单的<zxing-scanner></zxing-scanner>,也不会产生这种行为。

要复制 重现行为的步骤: 1. npm i @zxing/ngx-scanner 2.在Angular 8项目中,在HTTPS生产环境(例如部署到Heroku)中,转到component.html中带有<zxing-scanner></zxing-scanner>的页面。 3.不会要求任何权限来访问Chrome中的相机。 4.因此,无法打开扫描仪,并且控制台将显示以上错误。 5.转到Safari中的同一页面。浏览器要求获得访问相机的许可,扫描仪可以正常运行。

预期的行为 该扫描仪在生产过程中可用于所有浏览器,包括Chrome。

版本

  • 操作系统:Mac 10.14.6
  • 浏览器:Chrome:78.0.3904.97
  • 版本:@ zxing / ngx-scanner 2.0.1
  • 角度8

其他上下文

  • 在localhost上,一切都可以在Chrome和Safari上正常运行。
  • Chrome浏览器的安全设置未将产品网站列为安全例外。
  • 访问其他人的zxing-scanner页面,例如在Chromebook上显示Stack闪电战,则表明扫描程序正在按预期方式请求许可,并且一切运行正常。在我的环境中重现相同的代码时,扫描仪不起作用,并出现上述错误。
  • 如果它不能在Safari中运行,我认为问题出在我的环境中,因为所有迹象都指向该环境...但是它可以在Safari中运行。也许Safari的安全性可以做到这一点,但是即使按照repo's禁用Chrome安全性,也会发生相同的错误。
  • 我还使用服务人员(通过WorkboxPlugin)通过本地缓存进行脱机访问。我排除了扫描仪页面,但它仍然无法正常工作。

1 个答案:

答案 0 :(得分:0)

我也有同样的情况。请检查标题... 在我的.htaccess文件中,我有这样的内容:

Header set Feature-Policy "geolocation 'none'; midi 'none'; camera 'none'; usb 'none'; magnetometer 'none'; accelerometer 'none'; vr 'none'; speaker 'none'; ambient-light-sensor 'none'; gyroscope 'none'; microphone 'none'"

如您所见:

camera 'none';

Firefox忽略了它,而chrome没有。