jquery.qrcode.min.js 兼容 IE6
<!-- 二维码 -->
<div id = "qrcode"></div>
// 渲染二维码
$(function() {
var url = window.location.href;
$("#qrcode").qrcode({
render: "table", // 渲染方式有table方式和canvas方式
width: 150, //默认宽度
height: 150, //默认高度
text: url, //二维码内容
typeNumber: -1, //计算模式一般默认为-1
correctLevel: 2, //二维码纠错级别
background: "#ffffff", //背景颜色
foreground: "#000000" //二维码颜色
});
})
问题描述
- 通过
jquery.qrcode.min.js
在前端生成二维码,并且调用 window.print();
需要将二维码打印出来,那么问题来了。 - 渲染方式有
table
方式和canvas
方式, 使用canvas
必须在支持canvas
的浏览器才能使用,比如:火狐,谷歌,IE9+ 以及其它支持canvas的浏览器中使用。 - 在IE6上(不支持
canvas
),则通过table
的方式渲染也可以将二维码在页面上显示。但是通过 window.print();
二维码显示不出来,table
方式渲染就是通过往td
中填充background-color
来显示每个点的。由于浏览器在调用打印方法的时候会忽略调背景颜色。
解决思路
- 为确保IE6上也能够正常使用,可以在原有的
td
中添加div
,使用div
的border-top
上边框设置为长和宽相等形成二维码的每一个小点,其余的border-left
,border-right
,border-bottom
都设为0px
。
修改后的代码
- gitee:https://gitee.com/jiangshaoneng/web-qrcode
- 项目中的
jquery.qrcode.min.js
为修改过后的,可直接替换掉原来的。即可解决兼容问题 - 以下仅为修改的部分代码
// 以下是我修改的部分
......
c.width=h.width;c.height=h.height;
for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)
for(var i=0;i<a.getModuleCount();i++){
d.fillStyle=a.isDark(f,i)?h.foreground:h.background;
var g=Math.ceil((i+1)*b)-Math.floor(i*b),
j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)
}}else{
a=new o(h.typeNumber,h.correctLevel);
a.addData(h.text);a.make();
d=Math.floor(h.width/a.getModuleCount());b=Math.floor(h.height/a.getModuleCount());
c=r("<table></table>").css("width",d*a.getModuleCount()+"px")
.css("height",b*a.getModuleCount()+"px").
css("border","0px")
.css("border-collapse","collapse")
.css("background-color",h.background);
for(e=0;e<a.getModuleCount();e++){
f=r("<tr></tr>").css("height",b+"px").appendTo(c);
for(i=0;i<a.getModuleCount();i++){
t=r("<td></td>").css("width",d+"px").css("height",d+"px").css("padding","0px").appendTo(f);
// 在原来的td中添加div,通过div的上边框来显示颜色。
r("<div></div>").css("border-width",d+"px")
.css("border-top",d+"px").css("border-bottom","0px")
.css("border-left","0px").css("border-right","0px")
.css("border-style","solid")
.css("border-top-color",a.isDark(e,i)?"black":"white").appendTo(t);
}
}
}
......
总结
- 在web项目中,还可以通过在后台生成二维码图片给到前台使用。这样的话就不用考虑以上的兼容问题。
- 当然我这里仅仅是考虑使用
jquery.qrcode.min.js
的时候。虽然这个方法有点曲线救国的方式。不过还是决绝的项目中的问题。
最后
- 如果在这里获得过启发和思考,希望点赞支持!对于内容有不同的看法欢迎来信交流。
- 技术栈 >> java
- 邮箱 >> 15673219519@163.com