jquery.qrcode.min.js 兼容 IE6

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,使用divborder-top上边框设置为长和宽相等形成二维码的每一个小点,其余的border-leftborder-rightborder-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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放码过来_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值