【问题标题】:In production, zxing/ngx-scanner works in Safari but not in Chrome在生产中,zxing/ngx-scanner 在 Safari 中工作,但在 Chrome 中不工作
【发布时间】:2020-03-09 19:00:10
【问题描述】:

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

我使用过来自 Stackblitz 的样板 zxing 代码、此 repo's 文档以及其他地方,例如<zxing-scanner></zxing-scanner> 在 Angular 8 component.html 中。即使是普通的<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 安全设置不显示列为安全例外的 prod 网站。
  • 访问其他人的zxing-scanner页面,例如在 Stack blitz 上,而在 Chrome 中显示扫描仪正在按预期请求权限,并且一切正常。在我的环境中复制相同的代码时,扫描仪无法工作并出现上述错误。
  • 如果它在 Safari 中不起作用,我认为问题出在我的环境中,因为所有迹象都表明...但它在 Safari 中起作用。也许 Safari 的安全性允许这样做,但即使按照 this post 禁用 Chrome 安全性,也会发生同样的错误。
  • 我还使用服务工作者(通过 WorkboxPlugin)通过本地缓存进行离线访问。我排除了扫描仪页面,它仍然无法正常工作。

【问题讨论】:

    标签: angular google-chrome safari zxing


    【解决方案1】:

    我也有同样的情况。请检查您的标题... 在我的 .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 没有。

    【讨论】:

    • 你是对的。我的SecurityConfiguration.java 有一个我错过的camera 'none' 功能策略指令。请记住,不同的浏览器对这些策略的响应不同!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多