qrcode生成二维码微信长按无法识别问题的解决


Posted in Javascript onApril 04, 2019

最近用QRCode.js 生成二维码之后,发现在小米和华为手机的微信上面页面长按识别不了,苹果和其他手机浏览器是正常的。qrcode在页面生成会生成一个canvas标签和一个img标签,在电脑浏览器上调试的时候发现生成二维码之后canvas标签是会自动隐藏的,然后展示img标签,然后通过vConsole 发现在小米或者华为手机上生成的二维码是通过canvas展示的,img标签被隐藏,而且img.src没有任何内容。怀疑是浏览器兼容问题。

jquery.qrcode.js 是一个纯浏览器 生成 QRcode 的 jQuery 插件((可以从https://github.com/jeromeetienne/jquery-qrcode 获取)),它使用非常简单,生成的 QRcode 无需下载图片,并且不依赖第三方服务,插件压缩之后大小小于 4K。

QRCode.js 基本用法

引入JS库

<script src="jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
 <script src="jquery.qrcode.min.js" type="text/javascript" charset="utf-8"></script>

html部分

<div id="qrcode"></div>

js部分

// 设置要生成二维码的链接
new QRCode(document.getElementById("qrcode"), codeUrl);

或者

var qrcode = new QRCode("qrcode", {
 text: codeUrl,
 width: 128,
 height: 128,
 colorDark : "#000000",
 colorLight : "#ffffff",
 correctLevel : QRCode.CorrectLevel.H //容错级别
});

容错级别,可设置为:
QRCode.CorrectLevel.L
QRCode.CorrectLevel.M
QRCode.CorrectLevel.Q
QRCode.CorrectLevel.H

清除重新生成

qrcode.clear(); // clear the code.
qrcode.makeCode("http://naver.com"); // make another code.

浏览器支持

IE6~10, Chrome, Firefox, Safari, Opera, Mobile Safari, Android, Windows Mobile, ETC.

长按识别方式

解决思路是从canvas中提取图片base64自己生成图片

html部分

<div id="codeDiv" style="display: none;"></div>
<div id="qrcode"></div>

js部分

var qrcode = new QRCode("codeDiv", {
  text: codeUrl,
  render: "canvas", //渲染方式指定canvas方式
  width: 128,
  height: 128,
  typeNumber:-1,//计算模式
  colorDark : "#000000", 
  colorLight : "#ffffff", 
  correctLevel : QRCode.CorrectLevel.H 
 });
 var canvas=document.getElementsByTagName('canvas')[0];
 var img = convertCanvasToImage(canvas);
 $('#qrcode').append(img);// 添加DOM
 //从 canvas 提取图片 image 
 function convertCanvasToImage(canvas) { 
  //新建Image对象
  var image = new Image(); 
  // canvas.toDataURL 返回的是一串Base64编码的URL
  image.src = canvas.toDataURL("image/png"); 
  return image; 
 }

参考

QRCode.js 二维码生成并能够长按识别
GitHub

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用CSS+JS实现的进度条效果效果
Jun 05 Javascript
JavaScript类和继承 constructor属性
Mar 04 Javascript
JS事件在IE与FF中的区别详细解析
Nov 20 Javascript
jQuery $.extend()用法总结
Jun 15 Javascript
jQuery中inArray方法注意事项分析
Jan 25 Javascript
JavaScript学习笔记之数组随机排序
Mar 23 Javascript
AngularJs 动态加载模块和依赖
Sep 15 Javascript
webpack独立打包和缓存处理详解
Apr 03 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
Apr 20 Javascript
微信小程序 地图map实例详解
Jun 07 Javascript
vue实现下载文件流完整前后端代码
Nov 17 Vue.js
el-table-column 内容不自动换行的解决方法
Aug 14 Vue.js
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
Apr 04 #jQuery
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
Apr 04 #Javascript
JS实现图片轮播效果实例详解【可自动和手动】
Apr 04 #Javascript
Vue传参一箩筐(页面、组件)
Apr 04 #Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
Apr 04 #Javascript
小程序getLocation需要在app.json中声明permission字段
Apr 04 #Javascript
Vue组件内部实现一个双向数据绑定的实例代码
Apr 04 #Javascript
You might like
PHP实现自动识别Restful API的返回内容类型
2015/02/07 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
小型js框架veryide.librar源代码
2009/03/05 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
JS全角与半角转化实例(分享)
2017/07/04 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
应届生服务员求职信
2013/10/31 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫