页面中嵌套iframe,微信浏览器长按二维码识别不了
问题:在微信浏览器内,页面中嵌套iframe,iframe中用户触发事件后有个弹框会显示二维码,用户长按二维码可以识别并跳转。尝试了一下,安卓是正常的,但是ios是识别不了的。
解决过程:
1.这里客户给的并不是一个二维码的图片地址,而是需要跳转的地址。首先需要先把跳转地址生成二维码。
这里用的是qrcode.js
html:作为生成二维码的容器
<div id="autoCode"></div>
js:这里需要引入qrcode.js.
我这里放在静态文件里,大家测试的时候可以使用,自己项目还是要提取出去使用。
$('#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,微信浏览器长按二维码识别不了的更多相关文章
- iphone微信长按二维码识别不了
在安卓版的微信长按二维码可以识别(前提是你的微信版本到支持此功能),但是到了苹果版的微信就识别不了,经个人测试发现是缩放的问题: 1.设置了初始缩放设置为1,最大缩放值要>=1,不支持缩放.-- ...
- 重磅消息:微信小程序支持长按二维码进入
之前微信小程序一般通过以下入口进入: 而用户经常使用“长按二维码”识别应用的功能一直未开放,据酷客多了解,微信安卓6.5.6内测版已经支持长按二维码识别和进入小程序,意味着把小程序二维码分享给朋友,或 ...
- 支付宝、微信、QQ 收款二维码三合一
最近折腾了一下合并收款码,简单记录一下折腾的过程,方法不唯一,只是提供一种思路,如果各位大佬有更加简单粗暴的办法,那就更好了. 原理 首先解析出三个二维码的内容,用 Nginx 判断 User age ...
- 网站实现微信登录之嵌入二维码——基于yii2开发的描述
之前写了一篇yii2获取登录前的页面url地址的文章,然后发现自己对于网站实现微信扫码登录功能的实现不是很熟悉,所以,我会写2-3篇的文章来描述下一个站点如何实现微信扫码登录的功能,来复习下微信扫码登 ...
- 微信小程序二维码识别
目前市场上二维码识别的软件或者网站越来越多,可是真正方便,无广告的却少之很少. 于是,自己突发奇想做了一个微信二维码识别的小程序. 包含功能: 1.识别二维码 ①普通二维码 ②条形码 ③只是复制解析出 ...
- 微信小程序通过二维码获取参数运行
小程序开发过程中会遇到参数id会通过二维码获取,然后执行接口获取数据,但是难免会遇到带过来的参数出现乱码,这样就需要解码,多个参数时就需要进行处理取我们需要的字段值:小程序开发过程中会遇到参数id会通 ...
- 微信小程序获取二维码并把logo替换为自己的头像
$avatarUrl = 'http://cms-bucket.nosdn.127.net/2018/05/28/a1a44ffdc2d24f928c1860d4fbf54703.jpeg?image ...
- 用c#开发微信 (20) 微信登录网站 - 扫描二维码登录
像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 1 创建网站应用 在微信开放平台创建一个网站应用 https:// ...
- 微信创建带参数二维码并加上logo
1.因为带参数二维码有两种,分别是字符参数,数值参数,因此,在写创建方法的时候,需要进行判断 public void ShowQcCode(N_WX_QrCode code) { QRCodeCrea ...
随机推荐
- TCP的流量控制和阻塞控制
流量控制和阻塞控制实例: 可以用一个例子来说明这种区别.设某个光纤网络的链路传输速率为1000Gbit/s.有一台巨型计算机向一台个人电脑以1Gbit/s的速率传送文件.显然,网络本身的带宽是足够大的 ...
- 大数据-redis-redis启动出错
redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error 解决方法(1) 首先如果你是从官方redis官 ...
- Moviepy音视频开发:视频转gif动画或jpg图片exe图形化工具开发案例
☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿之所以学习和研究Moviepy的使用,是因为需要一个将视频转成动画的工具,当时在网上到处搜索查找免费使用工具,结果找了很多自称免费的工具,但转完 ...
- moviepy音视频剪辑:视频半自动追踪人脸打马赛克
一.引言 在<moviepy1.03音视频剪辑:使用manual_tracking和headblur实现追踪人脸打马赛克>介绍了使用手动跟踪跟踪人脸移动轨迹和使用headblur对人脸进行 ...
- PyQt+moviepy音视频剪辑实战2:实现一个剪裁视频文件精华内容留存工具
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.引言 ...
- 第15.46节、PyQt显示部件:OpenGL Widget部件功能简介及使用案例
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 OpenGL Widget部件是一个Op ...
- 第四章 、PyQt中的信号(signal)和槽(slot)机制以及Designer中的使用
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 前面章节其实已经在使用信号和槽了,但是作为Qt中最重要的机制也是Qt区别与其他开发平台的重 ...
- (四)一个bug的生命周期
Bug的属性 Bug重现环境 这个应该是我们重现BUG的一个前提,如果没有这个前提,我们可能会无法重现问题,或者根本就无从下手. • 操作系统 这个是一般软件运行的一大前提,基本上所有的软件都依赖于操 ...
- 团队作业4-Day1
团队作业4-Day1 1. 各个成员在 Alpha 阶段认领的任务 Alpha任务分配 人员 小程序样式实现 吴安冬+吴梓华 小程序js代码及云数据实现 庾艺锋+白军强 项目测试 王泽鑫+赵玮锋 2. ...
- 沪苏浙皖共同打造区块链数字经济发展高地,Panda Global表示区块链真的来了!
近日,在长三角一体化发展重大合作事项签约仪式上,沪苏浙皖经信部门共同签约,推进长三角区块链数字经济一体化发展,共同打造数字经济发展高地.从此次签约活动也能看出来,区块链数字现金的发展已经得到了认可,早 ...