厉害了网页扫码,所有方法都给你总结到这了,赶紧收藏

最近做一个项目,要通过扫一扫查询对应的信息,由于现在已经有一部分二维码已被生成,为了兼顾已生成的二维码,所以需要使用网页的扫一扫功能去完成项目。

项目使用技术栈:vue2

厉害了网页扫码,所有方法都给你总结到这了,赶紧收藏_第1张图片

方案一、js 原生

热心的同事帮我已经找好了网页扫一扫 DEMO,给我说已经测试过了,Andriod 和 IOS 都可以正常使用。

使用 QRScanner 插件

其原理是通过
navigator.mediaDevices.getUserMedia 来获取用户的摄像头使用权限:

navigator.mediaDevices.getUserMedia(constraints)
.then(res => {  })
.catch(err => {  })

使用自己的 苹果11 测试完全正常,放置服务器上,让同事扫码的时候,真的是异常百态!存在的问题:

1、网页必须使用浏览打开,不可以使用微信内置浏览器。如果是微信打开,会提示 “对不起,未识别到扫描设备”。

2、有些手机,摄像头一直是前置摄像头,通过 facingMode 设置无效:

{ facingMode: { exact: "environment" } }

3、非手机内置浏览器,如:QQ、UC、百度等浏览器APP内,会存在找不到扫瞄设备。

4、最重要的是用户体验差。用户需要在浏览器打开,授权之后,才能进行扫码。

5、开发需要调试的设备较多。
navigator.mediaDevices.getUserMedia 兼容性差。

方案二、vue-qr 插件

官方文档:
https://www.npmjs.com/package/vue-qr

该插件不仅支持 vue2 ,还支持 vue3 。功能强大,能够生成二维码,还能够扫描、识别二维码,解析二维码。

git 地址:
https://github.com/MuGuiLin/QRCode

  • 有一个 HTML 版本。
  • 有一个 vue.js 版本。

测试地址:Demo:
https://muguilin.github.io/QRCode

存在问题:

1、网页必须使用浏览打开,不可以使用微信内置浏览器。如果是微信打开,会提示 “对不起,未识别到扫描设备”。

2、非手机内置浏览器,如:QQ、UC、百度等浏览器APP内,会存在找不到扫瞄设备。

3、最重要的是用户体验差。用户需要在浏览器打开,授权之后,才能进行扫码。

方案三、微信扫一扫

我把测试地址发到公司群,让同事帮我测试的时候,我发现程序员测试都说没问题,非程序员基本都是直接使用微信,点击扫一扫的时候,统一都是:“ 对不起,未识别到扫描设备 ”。转念一想,扫一扫好像是给开发同事做的。

转换思路,让用户在微信内直接点进去之后就可以进行扫码!所以选择 微信网页开发 -> 调用微信扫一扫。

优点:

1、用户使用方便,直接可以使用微信扫码。

2、开发方便,不用再考虑兼容安卓和ios的各种浏览器。

实现步骤:

  • 1、引入

引入方式1:

index.html 入口文件处引入 js 插件

在 wx 使用页面处,可以直接通过 window.wx 引用。

引入方式2:

npm install weixin-js-sdk

在需要使用的页面处,引入 wx 模块:import wx from 'weixin-js-sdk'

  • 2、配置
wx.config({
 debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
 appId: '', // 必填,公众号的唯一标识
 timestamp: , // 必填,生成签名的时间戳
 nonceStr: '', // 必填,生成签名的随机串
 signature: '',// 必填,签名
 jsApiList: [] // 必填,需要使用的JS接口列表
});
  • 3、调用方法
wx.scanQRCode({
 needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
 scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
 success: function (res) {
  var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
 }
});

具体的实现步骤以及可能遇到的问题都总结到《手把手教你调用微信扫一扫!三分钟包会》,需要的自行查阅。

 

你可能感兴趣的:(前端性能优化,前端,前端扫一扫)