问题:在微信浏览器内,页面中嵌套iframe,iframe中用户触发事件后有个弹框会显示二维码,用户长按二维码可以识别并跳转。尝试了一下,安卓是正常的,但是ios是识别不了的。

  解决过程:  

  1.这里客户给的并不是一个二维码的图片地址,而是需要跳转的地址。首先需要先把跳转地址生成二维码。

  这里用的是qrcode.js

  html:作为生成二维码的容器

<div id="autoCode"></div>

  js:这里需要引入qrcode.js.

  我这里放在静态文件里,大家测试的时候可以使用,自己项目还是要提取出去使用。

  <script type="text/javascript" src="https://e-static.oss-cn-shanghai.aliyuncs.com/js/qrcode.min.js"></script>

$('#autoCode').qrcode({ width: 120, height: 120, text: `${res.domainname}` }); // 生成二维码

  自定义宽度和高度,text : 生成的二维码需要跳转的地址。还可以自定义更多的样式,颜色之类的,有兴趣的可以查一下资料。

  现在页面中就可以生成二维码了,手机可以扫描跳转,但是在移动端,长按二维码时,并没有任何用处,接下来解决长按识别问题。

  2.将生成的二维码转化成img。

  通过qrcode生成的二维码,其实是用canvas绘制的,所以客户端长按并不能识别,所以需要自己将二维码转化成图片。

var mycanvas1=document.getElementsByTagName('canvas')[0]; // 获取canvas生成的图像,转化为img
var img=convertCanvasToImage(mycanvas1); /**
* 将生成的canvas 提取图片
*/
function convertCanvasToImage(canvas) {
    //新Image对象,可以理解为DOM
    var image = new Image();
    // canvas.toDataURL 返回的是一串Base64编码的URL,当然,浏览器自己肯定支持
    // 指定格式 PNG
    image.src = canvas.toDataURL("image/png");
    return image;
}

  这个时候以为大功告成了,试了一下安卓,可以长按识别跳转了,但是坑人的ios又不可以。

  3.解决ios长按识别不了问题

  问题原因:微信内ios识别二维码不准确,位置会有偏差,所能识别的区域页可能比当前二维码大小要小,导致用户按的位置并不一定可以识别。

  解决方案:

  ①.在用户触摸到二维码时,生成一个图片,这个一定要是直接在body下,不要嵌套在别的结构里。

  ②.触摸二维码时,给生成的img设置src,img的大小控制好,覆盖用户可能触摸到的位置。

  ③.img可能会影响到布局,这里要设置img的透明度,再利用定位,可以达到不影响布局的情况下,实现效果。这里要注意的是,千万别设置display:none,要设置opcity。

  ④.当触摸结束时,将img隐藏。

  上代码:

/**
* 给index传图片地址
*/
function sendImgSrc (url) {
$('.codeImg').on('touchstart', function () {
window.parent.postMessage(JSON.stringify({ status: 1, url: `${url}`}), '*')
}).on('touchend', function () {
window.parent.postMessage(JSON.stringify({ status: 2 }), '*')
})
}

  因为我的页面是在iframe加载的,所以我需要将图片地址传给他的parent去处理触摸时生成的图片。

  看一下父页面处理

// 解决iframe内二维码ios无法识别
window.addEventListener('message', function (e) {
var data = JSON.parse(e.data)
if (data.status == 1) {
$('.erweimaclass').css('z-index', 3)
$('.erweimaclass').attr('src', data.url).show();
} else if (data.status == 2){
$('.erweimaclass').css('z-index', '1')
$('.erweimaclass').hide();
} else if (data.status == 3) {
$('.erweimaclass').css('z-index', '1')
$('.erweimaclass').hide();
}
})

  这样就可以控制图片的显示和隐藏了。再尝试,ios页可以正常识别和跳转了,如果你还不能识别,那你需要去调整你body下面的img的大小和位置,让用户触摸二维码时,区域被覆盖。

页面中嵌套iframe,微信浏览器长按二维码识别不了的更多相关文章

  1. iphone微信长按二维码识别不了

    在安卓版的微信长按二维码可以识别(前提是你的微信版本到支持此功能),但是到了苹果版的微信就识别不了,经个人测试发现是缩放的问题: 1.设置了初始缩放设置为1,最大缩放值要>=1,不支持缩放.-- ...

  2. 重磅消息:微信小程序支持长按二维码进入

    之前微信小程序一般通过以下入口进入: 而用户经常使用“长按二维码”识别应用的功能一直未开放,据酷客多了解,微信安卓6.5.6内测版已经支持长按二维码识别和进入小程序,意味着把小程序二维码分享给朋友,或 ...

  3. 支付宝、微信、QQ 收款二维码三合一

    最近折腾了一下合并收款码,简单记录一下折腾的过程,方法不唯一,只是提供一种思路,如果各位大佬有更加简单粗暴的办法,那就更好了. 原理 首先解析出三个二维码的内容,用 Nginx 判断 User age ...

  4. 网站实现微信登录之嵌入二维码——基于yii2开发的描述

    之前写了一篇yii2获取登录前的页面url地址的文章,然后发现自己对于网站实现微信扫码登录功能的实现不是很熟悉,所以,我会写2-3篇的文章来描述下一个站点如何实现微信扫码登录的功能,来复习下微信扫码登 ...

  5. 微信小程序二维码识别

    目前市场上二维码识别的软件或者网站越来越多,可是真正方便,无广告的却少之很少. 于是,自己突发奇想做了一个微信二维码识别的小程序. 包含功能: 1.识别二维码 ①普通二维码 ②条形码 ③只是复制解析出 ...

  6. 微信小程序通过二维码获取参数运行

    小程序开发过程中会遇到参数id会通过二维码获取,然后执行接口获取数据,但是难免会遇到带过来的参数出现乱码,这样就需要解码,多个参数时就需要进行处理取我们需要的字段值:小程序开发过程中会遇到参数id会通 ...

  7. 微信小程序获取二维码并把logo替换为自己的头像

    $avatarUrl = 'http://cms-bucket.nosdn.127.net/2018/05/28/a1a44ffdc2d24f928c1860d4fbf54703.jpeg?image ...

  8. 用c#开发微信 (20) 微信登录网站 - 扫描二维码登录

    像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 1 创建网站应用 在微信开放平台创建一个网站应用 https:// ...

  9. 微信创建带参数二维码并加上logo

    1.因为带参数二维码有两种,分别是字符参数,数值参数,因此,在写创建方法的时候,需要进行判断 public void ShowQcCode(N_WX_QrCode code) { QRCodeCrea ...

随机推荐

  1. 【五校联考1day2】JZOJ2020年8月12日提高组T2 我想大声告诉你

    [五校联考1day2]JZOJ2020年8月12日提高组T2 我想大声告诉你 题目 Description 因为小Y 是知名的白富美,所以自然也有很多的追求者,这一天这些追求者打算进行一次游戏来踢出一 ...

  2. java ipv6发邮件需要注意的点

    和ipv4发邮件一样,毕竟ip只是用来找地址的,v4 v6使用上基本没区别. 但有一点得注意:java ipv6采用发送RST包来通知邮件服务器断开连接,这样会导致客户端抛 MessagingExce ...

  3. SQL Server常用函数及命令

    1.字符串函数 --ascii函数,返回字符串最左侧字符的ascii码值 SELECT ASCII('a') AS asciistr --ascii代码转换函数,返回指定ascii值对应的字符 SEL ...

  4. 理解java底层通讯协议

    引言: 本周自己重新对底层通讯方式进行了学习,在此做一个输出. 分别从客户端发送多个请求的需求角度与服务端接收多个连接发送请求的需求角度,剖析4种基于java自身技术实现的消息方式通讯所带来的影响,解 ...

  5. AcWing 398. 交通实时查询系统

    大型补档计划 题目链接 只有割点是必行点. 在任意一个点双中,都有分叉没有点交集的两条路径. 所以 v-DCC 缩点. 但是他问的是路径走到另一条路径的必行点.我蒙蔽了,发现自己对无向图双联通分量理解 ...

  6. 【学习笔记】浅析平衡树套线段树 & 带插入区间K小值

    常见的树套树 一般来说,在嵌套数据结构中,线段树多被作为外层结构使用. 但线段树毕竟是 静态 的结构,导致了一些不便. 下面是一个难以维护的例子: 带插入区间 \(k\) 小值问题 来源:Luogu ...

  7. memcached session会话共享

    1 安装依赖包yum install libevent livevent-devel nc -y 2 yum 安装memcachedyum install -y memcached 3 启动memec ...

  8. 庐山真面目之七微服务架构Consul集群、Ocelot网关集群和IdentityServer4版本实现

    庐山真面目之七微服务架构Consul集群.Ocelot网关集群和IdentityServer4版本实现 一.简介      在上一篇文章<庐山真面目之六微服务架构Consul集群.Ocelot网 ...

  9. SQL Server NULL值用法及处理详解

    用法如下: 1.如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录,这意味着该字段将以 NULL 值保存. 2.NULL 用作未知的或不适用的值的占位符. 3.定 ...

  10. centos下配置Apache的https强制跳转

    vim /etc/httpd/conf/httpd.conf 新增如下三行 RewriteEngine on RewriteCond  %{HTTPS} !=on RewriteRule  ^(.*) ...