QRcode.js生成二维码
写在前面,此文章意在记录工作中的总结,为他人提供一点点的帮助,对文章的内容欢迎大家提出意见
实现背景
在生成报告的同时给报告展示一个二维码进入商品界面
实现步骤
-
导入qrCode.js的js文件
-
本地引入js,下载js文件,采用的方式引入
-
远程引入js,这里不赘述,提供一个字节跳动的示例引入
<script src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/qrcodejs/1.0.0/qrcode.min.js"></script> -
Vue引入js
npm i qrcodejs2
-
2.创建二维码渲染的位置
var qrcode = new QRCode(document.getElementById("qrCode"), {
width: 80, //二维码的宽
height: 80, //二维码的高
colorDark : "#000000", //二维码黑色的地方
colorLight : "#ffffff", //二维码白色的地方
correctLevel : QRCode.CorrectLevel.L, //二维码的校错等级,L为最低级
});
当然你也可以这样,高手需要更多参数!
var qrcode = new QRCode(document.getElementById("qrCode"), {
render : 'canvas', //设置渲染方式,有table和canvas,使用canvas方式渲染性能相对来说比较好
minVersion : 40,
maxVersion : 40, //min和maxVersion都是对内容的限制,值越大,容纳的数据越多
ecLevel : 'L', //识别度 'L', 'M', 'Q' or 'H'
left : 0,
top : 0,
size : 256, //尺寸
fill : '#000', //二维码颜色
background : null, //背景色
radius : 0.0, // 0.0 .. 0.5
quiet : 0, //边距
mode : 4,
mSize : 0.3, //图片大小
mPosX : 0.5,
mPosY : 0.5,
});
3.创建链接数据源,通过创建的js对象调用内部的方法来生成二维码
//此处应该注意,在业务场景下,需要对url链接先发送请求判断链接能否访问正确
JQ.ajax({
url:_ctxPath+"/androidShop.do",
type:"post",
data:{"数据源"},
dataType:"json",
cache:false,
statusCode: {
200: function (json) {
try {
qrcode.makeCode(qrurl) //此处为生成验证码的方法,参数为访问地址
} catch (err) {
console.log(err);
alert("生成二维码失败,请刷新页面重试");
}
}
}
})
需要注意的问题
- 需要注意二维码内部包含的地址不应该过长,否则就会导致生成的二维码太过密集
- 记录一种思路,通过redis把报告数据生成为一个key值存到redis或者UUID存入数据库,缩短url长度
- 在生成二维码的时候一定要先进行访问,判断地址是否访问畅通,保证用户体验
- 在二维码扫描访问时跳回原来页面会报QRCode的undefined问题,可以将QRCode变量在新页面中进行重新赋值为null
- 如果显示"code length overflow"的错误
-
Uncaught Error: code length overflow. (1604>1056) - 因为二维码包含的url长度过长,解决办法是修改url长度,此错误在url中包含中文的情况下更常见,因为地址中的url中文常被转码,地址url更长
-
- 如果出现二维码包含的url长度过长,还会出现的问题是二维码生成的图片变模糊,解决方法如下:
-
在生成二维码的参数中设置为canvas绘画,详见本文的高手参数
-
将二维码的大小样式都设置为百分百,用父容器来缩小图片,总体逻辑就是先放大再缩小,下面是代码:
-
//qrCode的id选择器,就是生成二维码的div标签的id #qrCode img{ width : 90px; height: 90px; } //此为父容器,即二维码的img #qrCode canvas{ width : 100%; height: 100%; } //此为内部图片的大小
-
总结
- qrCode的js库提供了很便捷的生成二维码方式,但是仍然需要注意跳转地址的安全性,选择合适的加密方式加密
- 下班快乐! 双休大吉!