微信内置浏览器 长按识别二维码 功能的两三个坑与解决方案

微信内置浏览器动态生成二维码并长按识别 现如今围绕微信生态相关开发已经非常常见,本期带来如何通过 qrcode.js 实现微信内置浏览器动态生成二维码并能够长按识别 以及 通过 html2canvas 生成图片并长按保存 说几个知识点 微信长按弹出识别选项的原理 微信客户端检测到用户长按img标签微信主动进行截屏并识别图片,二维码识别采用的是截屏而不是通过img标签微信识别成功后执行相关操作 Base64 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. 阅读详情

这篇文章是上一篇的延伸与总结,做的一个微信游戏宣传页上要调用长按识别二维码的功能,做的过程中遇到了两个坑,后来在组里分享会上分享了入坑经历,然后再度发现一个坑。本文就是在分享会上发言总结而成。

坑一:iOS 版微信长按识别二维码无法正常识别的bug

以下实测在iOS 版(iPhone)微信2.2 中有此bug,安卓版微信暂时没有发现有此bug。“众所周知”,在一些使用在微信内置浏览器的页面上要调用其长按识别二维码的功能,需要将二维码图片单独切出,img 标签形式展现。长按识别二维码 的原理Jeff 不甚了解,但却发现其有一个实际可识别区域上移的bug:对于二维码区域,实际可识别区域是整体上移64px,64px 的偏移量与二维码大小本身无关。

下面是一个重现bug 的Demo页面,请用iPhone 版微信扫描:


红色的色块区域是我单独为了定位区域而写的,不是在二维码本身(具体可以查看上面Demo 的源代码),用手指长按你可以看到实际可识别二维码区域为红色部分:即整体可识别区域上移了64px,而往下拉看到不同大小的二维码你会发现这个64px 的偏移量与二维码本身大小无关。友情提示:你可以用小拇指在边界区域长按以确认。


为什么是神秘的64px 偏移量?答案是:64px 正好是微信内置浏览器标题栏+系统标题栏的高度。可以猜测的是,微信客户端在识别二维码的时候忽略了微信标题栏+系统状态栏的高度。

后来进一步排查的时候,发现二维码大到一定程度就没有“识别上移”的诡异现象了,大概是二维码大小在400px 以上的时候就没有(当然,这个是在iPad 版微信上测出来的),具体可以查看下面这个Demo页面:


人在微信实习,所以后面经过与微信 iOS 开发人员的反馈沟通,确定是微信的 bug,也的确是这个64px 的问题;据他们的说法目前已经修复,但能否在下一个版本中加入么,就不得而知了。

解决方案的话有两个:

1)通过img增加padding 增大可接触面积;这个需要微调。

2)为二维码图片本身增加透明底部背景,这也是我们团队采用的方案。类似下图的样子,前端上用户是看不到的;但有个缺点就是如果用户保存二维码后则不是那么好看。

坑二:两(多)张两张二维码无法在同一屏幕视窗中共存

小标题说的“同一屏幕视窗”是指微信内置浏览器中在当前的手机屏幕上显示的可见范围,我们发现,当同一同一屏幕视窗中存在两个或以上的二维码的时候,微信客户端就会识别错误,无论你按哪个二维码长按识别,识别出来都是同一个目标。这个问题在iOS 版(iPhone)微信2.2及安卓版上均有之。

下面是一个演示Demo页面,请用目标手机(iPhone 或安卓机上)微信扫描访问,然后长按识别二维码:


该页面一共有六个二维码,两两分组为三组,每组的二维码的信息分别是指向qq.com、baidu.com 的url。为了保证每次只有一组二维码在当前屏幕可视范围,页面特意将每组二维码距离拉得很大。每次请保持只有一组二维码在你当前屏幕范围内,然后请依次 长按识别二维码。你会发现无论无论你按哪个二维码长按识别,识别出来都是同一个目标。

然后再尝试最后一组二维码,尝试通过滚动页面使得某个二维码不在你的屏幕可见范围,再执行长按识别二维码。

通过上面的Demo 页面,其实我们可以猜测微信中长按识别二维码的运行原理,就是你长按的时候相当于将当前手机屏幕截屏,识别截屏后的图片,这样一张图片有两个二维码图的时 候当然只会识别出一个。顺着这个思路也可以解释上述坑一,因为截屏的图片当然包括了系统状态栏那部分,也就不难理解为什么会有“识别上移”的诡异现象了。

解决方案的话就是不要将两个二维码共存在同一个页面中。

坑三:多次执行长按二维码的功能会导致内存泄露,手机会变卡

多次执行长按二维码的功能会导致手机(iPhone)变卡。之前我做测试的时候也发现,多次测试后居然右键都识别出来是二维码图片(即没有出现“识别二维码”的按钮)。


jquery实现微信长按识别二维码 - 在线生成二维码 jquery实现微信长按识别二维码 - 在线生成二维码1.引入JS库 <script src="jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script> <script src="jquery.qrcode.min.js" type="text/javascrip 阅读详情

相关推荐

(补充)微信长按识别二维码 -- 页面多个二维码如何识别?(二)

基于上一篇微信长按识别二维码 -- 页面多个二维码如何识别? )在部分设备上,如果图片非常多,还是会出现识别错误的bug(主要是二维码显示一半或居于底部时),修改了识别流程,改为点击图片弹窗,然后长按识别。 微信长按识别二维码 页面布局,在列表页上覆盖一层大图div <div id="tempQrCodeImgDiv" style="width:100%;height:1...

IT老五 9839

微信内置浏览器 长按识别二维码 的问题与解决方案

首先要注意:在微信里面只有img写的图片才可能识别二维码。而你写的background-image是识别不出来的。 1,在iOS 微信6.2.2识别的二维码的区域向上偏移了64px 这64px是微信内置浏览器标题栏+系统标题栏 二维码大到一定程度就没有“识别上移”的诡异现象了,大概是二维码大小在400px 以上的时候就没有。 解决: 1.通过img增加pa

肖肖肖丽珠的博客 1万+

最新版微信完美解决微信浏览器内长按识别个人收款码

解决微信8.0.32新版本手机微信不能长按识别个人收款码问题下载源代码一看及懂

解决新版微信个人收款二维码在H5网页里不能长按识别支付

微信8.0.16之前版本可以实现长按识别,长按识别的地方显示一下,马上被屏蔽不见……之后的版本为了限制非当面交易。

xlkcsn的博客 4351

Simulink玩转PMSM无感FOC:从IF强拖参数调试到切换失败的避坑指南

本文深入探讨了Simulink在PMSM无感FOC控制中的IF强拖启动参数调试与切换避坑技巧。通过详细解析强拖加速、速度维持和闭环切换三大阶段的设计逻辑,以及五个常见陷阱的解决方案,帮助工程师快速定位启动失败和切换震荡问题。文章还提供了典型故障的波形诊断方法和高级调试工具链优化建议,是电机控制领域的实用指南。

weixin_29164843的博客 408

深度学习中 Internal Covariate Shift 问题以及 Batch Normalization 的作用

深度学习中 Internal Covariate Shift 问题以及 Batch Normalization 的作用前言一、Batch Normalization是什么?1.1 Internal Covariate Shift1.2 Internal Covariate Shift 带来的影响1.3 如何减缓 Internal Covariate Shift 问题带来的影响白化(Whitening)白化存在的问题二、Batch Normalization2.1 传统 Normalization2.2 改进

一扣解千愁的博客 4297

微信小程序如何页面分享,如何图片长按识别二维码等问题汇总

小程序业务场景解决方案

少油少盐不要辣 1846

Centos7搭建OpenStack+创建iaas云主机

主要说明在控制节点和计算节点上,通过脚本的形式,安装OpenStack的iaas安装步骤和创建可运行的云主机。提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。

weixin_48218106的博客 1万+

uniapp 微信小程序长按识别二维码,跳转小程序、个人微信

业务要求是小程序放一个二维码图片,长按可以识别二维码,进而识别出个人微信,添加个人微信;我们可以通过uni.previewImage(OBJECT)或者wx.previewImage(Object object) 预览当前图片去实现

程邓楠的博客 2万+

CentOS7 编译升级GCC至9.3.0

1)下载GCC9.2.0源码并解压 从GCC官方FTP下载地址可以看到GCC最新版本为9.3.0。由于官网下载速度慢,实际上用清华大学的镜像站进行下载,代码如下: wget -c /opt/tmp/ https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz #考虑到安装失败的可能性,创建一个临时文件夹来安装GCC...

haha123486的博客 1万+

视觉Transformer实战 | Vision Transformer(ViT)详解与实现

在计算机视觉领域,卷积神经网络 (CNN) 长期以来一直是处理图像任务的主流架构。然而,随着 Transformer 在自然语言处理领域的巨大成功,研究人员开始探索将这种基于自注意力机制的架构应用于视觉任务。Vision Transformer (ViT) 是这一探索的重要里程碑,它首次证明了纯 Transformer 架构在图像分类任务上可以超越最先进的 CNN 模型。本文将详细介绍 ViT 的技术原理,并使用 PyTorch 从零开始构建 ViT 模型用于图像分类任务。

盼小辉丶的博客 4万+

微信小程序长按识别图片二维码功能

Page({// 处理长按事件})

一个努力不被优化的程序员 1万+

SCI论文发表很容易【5】:比较容易中的期刊

整理了一些经管方面比较容易中稿的期刊,可供大家参考

qq_25018077的博客 1679

微信iOS长按无法识别二维码

真的是无力吐槽微信的坑真的多把人能呕死,做了个公众号开发一大堆的坑 希望你看完每个字 分享一下ios微信长按无法识别二维码的问题 在网上找了一大堆的处理方式说增加img 的padding、设置缩放的、还有说图片大小的问题 、我扫码图片就是从服务号弄下来的。最后还是没用。 然后我就研究了一下到底为啥 测试流程 这个做了一天的测试才发现测试流程的效果 复制可以识别二维码的公众号地址 ...

小马总的博客 8327

lammps教程:实例讲解npt、nvt系综的选择

对于lammps新手来说,系综的选择令人困惑,到底是应该用nvt系综还是npt系综? 我在初学lammps时就被这个问题困扰了很久。如果去问别人,可能会告诉你一个答案:根据模拟需要确定。 其实和没说一样。 到底如何确定系综,确实不是一句两句能够说清楚的,不同的体系、不同的模拟目的要选择不同的系综。 前几天遇到的一个合金的模拟案例,比较有代表性,分享出来供大家参考。 建模方法和之前介绍过的高熵合金建模方法类似,先建立单晶模型,然后使用替换原子的命令获得合金结构。 建模完成后,按照常规,先上nvt系综进行驰豫

lammps_jiayou的博客 9768

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

问题描述 QRcode 生成二维码,展示到页面,微信打开,长按二维码没反应。而直接放二维码图片上去可以识别。 问题原因 手机兼容问题 qrcode在页面生成二维码时,会生成一个canvas标签和一个img标签。 在电脑浏览器上调试的时候,发现生成二维码之后canvas标签是会自动隐藏的,然后展示img标签,我们看到和识别的其实是图片。 本来那个canvas应该是隐藏的,不过部分安卓机里面,can...

邪人君子的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

微信长按识别二维码bug整理

微信长按识别二维码问题搜集与整理最近在折腾一个手机端页面长按识别二维码的问题。发现长按二维码时在ios和android手机上识别不是那么灵敏。下面整理下我对该问题的总结。

Preserve 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

base64转二维码_微信内置浏览器动态生成二维码并长按识别

现如今围绕微信生态相关开发已经非常常见,本期带来如何通过 qrcode.js 实现微信内置浏览器动态生成二维码并能够长按识别 以及 通过 html2canvas 生成图片并长按保存说几个知识点微信长按弹出识别选项的原理微信客户端检测到用户长按img标签微信主动进行截屏并识别图片,二维码识别采用的是截屏而不是通过img标签微信识别成功后执行相关操作Base64Base64是网络上最常见的用于传输8B...

weixin_39827315的博客 1445

ios中微信内iframe页面,长按图片不出识别二维码功能

2.ios中微信内iframe页面,长按图片不出识别二维码功能 解决办法: 用 postMessage处理两个页面的跨域问题:https://www.cnblogs.com/roam/p/7520433.html 在长按iframe中的二维码图片时,在父级页面生成一个二维码盖在上面。 iframe页面 $('#erweima').on('touchstart',function(){ ...

webjhh的博客 6747
上一篇: 前端页面中iOS版微信长按识别二维码的bug与解决方案
iplaycoder
博客等级 码龄11年 7粉丝 0原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值