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 相关文章推荐
javascript jQuery插件练习
Dec 24 Javascript
Javascript 兼容firefox的一些问题
May 21 Javascript
Extjs grid panel自带滚动条失效的解决方法
Sep 11 Javascript
js实现非常棒的弹出div
Oct 06 Javascript
微信小程序链接传参并跳转新页面
Nov 29 Javascript
JavaScript中object和Object的区别(详解)
Feb 27 Javascript
JavaScript中document.referrer的用法详解
Jul 04 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
Aug 14 Javascript
vue  directive定义全局和局部指令及指令简写
Nov 20 Javascript
JS中call()和apply()的功能及用法实例分析
Jun 28 Javascript
Vue的双向数据绑定实现原理解析
Feb 17 Javascript
JavaScript如何操作css
Oct 24 Javascript
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判断所处服务器操作系统的类型
2013/06/20 PHP
PHPMailer发送邮件
2016/12/28 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
JavaScript的parseInt 进制问题
2009/05/07 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
Python中的urllib模块使用详解
2015/07/07 Python
Python切片工具pillow用法示例
2018/03/30 Python
简单了解django orm中介模型
2019/07/30 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
Ivory Isle Designs美国/加拿大:婚礼和活动文具公司
2018/08/21 全球购物
Groupon法国官方网站:特卖和网上购物高达-70%
2019/09/02 全球购物
安全大检查反思材料
2014/01/31 职场文书
入党自我评价范文
2014/02/02 职场文书
工艺员岗位职责
2014/02/11 职场文书
授权委托书样本
2014/04/03 职场文书
市政管理求职信范文
2014/05/07 职场文书
篝火晚会策划方案
2014/05/16 职场文书
团干部培训方案
2014/06/03 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
工作失职自我检讨书
2015/05/05 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers