[天坑]之qrcode二维码在app内置浏览器中无法显示问题
记录一下最近的工作难点,之一...
首先本项目使用的是qrcode-generator,市面上生成二维码的第三方库有很多qrcode.vue、qrcode、QRious等等
<div id="qrcode"></div>
import QRCode from "qrcode-generator";
data() {
return {
tenant: "turnchartenantkey",
url: "",
id: "",
storeObj: {},
};
},
created() {
this.generateQRCode();
// this.drawQrc();
},
methods: {
generateQRCode() {
//省略*****多判断及请求
// 获取容器元素;
const container = document.getElementById("qrcode");
// 创建二维码生成器实例
const qr = QRCode(0, "L");
// 设置二维码内容
this.url = `your url`;
console.log(this.url, "url");
qr.addData(this.url);
qr.make();
// 渲染二维码到容器元素中
container.innerHTML = qr.createSvgTag({
scalable: true,
});
}
//css
#qrcode {
width: 300px;
height: 300px;
margin: 0 auto;
padding: 25px;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
}
看着挺正常的,就是普通的qrcode生成二维码,暗藏玄机

是的,app内置浏览器中无法显示二维码,尝试过各种方法,排除了各种可能导致错误的原因,最后确定在手机可能对svg的编译存在一些误差,要优化代码并使二维码在应用程序的嵌入式浏览器中正常显示,首先需要将其转换为数据 URL 并使用img标签来显示二维码,而不是将二维码呈现为 SVG 直接插入 DOM。这种方法更兼容不同的浏览器和嵌入式 Web 视图。
将模板部分中的<div id="qrcode"></div>替换为。
<img id="qrcode" :src="qrcodeUrl" alt="QRcode">
添加qrcodeUrl到data部分并更新generateQRCode设置二维码数据 URL 的方法,qrcodeUrl而不是直接修改 DOM。
下面是更改后的代码
<template>
<div>
<div class="qr-card">
<div class="qrcode-container">
<div v-if="loading" class="loading-spinner"></div>
<img v-else id="qrcode" :src="qrcodeUrl" alt="QR Code" />
</div>
</div>
</div>
</template> <script>
import QRCode from "qrcode-generator"; export default {
name: "QRcode",
data() {
return {
qrcodeUrl: "",
loading: true,
};
},
created() {
this.generateQRCode();
},
methods: {
generateQRCode() {
const qr = QRCode(0, "L");
this.url = `your url`;
qr.addData(this.url);
qr.make();
const svgTag = qr.createSvgTag({ scalable: true }); // 将 SVG 转换为数据 URL
const svgBlob = new Blob([svgTag], { type: "image/svg+xml" });
const svgUrl = URL.createObjectURL(svgBlob);
this.qrcodeUrl = svgUrl; // 不再需要时释放对象 URL
this.$once("hook:beforeDestroy", () => {
URL.revokeObjectURL(svgUrl);
}); this.loading = false;
},
},
};
</script> <style lang="less" scoped>
* {
box-sizing: border-box;
} .qrcode-container {
width: 300px;
height: 300px;
margin: 0 auto;
padding: 25px;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
} .loading-spinner {
width: 50px;
height: 50px;
border-radius: 50%;
border: 3px solid #ccc;
border-top-color: #333;
animation: spin 1s linear infinite;
} @keyframes spin {
to {
transform: rotate(360deg);
}
}
}
</style>
在此更新的代码中,SVG QR 代码使用转换为数据 URL"URL.createObjectURL"并分配给"qrcodeUrl". 该"URL.revokeObjectURL"方法在组件销毁之前调用以释放对象 URL。<img>然后使用带有qrcodeUrlas属性的标签显示 QR 码src,并且添加加载中loading,该loading属性设置为true,表示加载状态处于活动状态。二维码生成显示成功后,loading设置为false,显示二维码时隐藏加载框。
[天坑]之qrcode二维码在app内置浏览器中无法显示问题的更多相关文章
- 【thinkphp5.1】 endroid/qrcode 二维码生成
composer 链接: https://packagist.org/packages/endroid/qrcode 注意:PHP版本 要求 7.1+ 1. 使用 composer 安装 endroi ...
- 使用扫描二维码打开app
应该不少人遇到过这种需求,扫描二维码打开app如果用户没有这个app则提示它跳转. 用网页直接来调用app是不打可能的,必须原生那边先做一些配置. 首先,安卓和苹果的调用方法是不同的. 所以我们需要先 ...
- iOS - QRCode 二维码
1.QRCode 在 iOS7 以前,在 iOS 中实现二维码和条形码扫描,我们所知的有,两大开源组件 ZBar 与 ZXing. 这两大组件我们都有用过,这里总结下各自的缺点: 1.ZBar 在扫描 ...
- (转)QRCODE二维码介绍及常用控件推荐
什么是QR Code码? QR Code码是由日本Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大.可靠性高.可表示汉字及图象多种文字信息.保密防 ...
- 手机扫描二维码下载APP,根据操作系统不同自动下载
Android和IOS手机扫描二维码下载APP,根据OS不同,自动处理相应下载操作.IOS自动跳转至AppStore应用下载页,Android自动下载应用的apk包. <script type= ...
- 生成扫描二维码下载app的二维码的方法
进入APP store苹果应用程序商店,根据分类找到你要生成二维码的APP,然后在浏览器连接里找到ID后的一串数字就是APP的应用ID了. 安卓系统的appid 在电脑浏览器中打开应用宝官网,http ...
- jQuery生成QRcode二维码
jQuery生成QRcode二维码示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...
- PHP生成QRCode二维码
php生成QRCode二维码示例 <?php //引入 phpqrcode 类库 //phpqrcode下载地址:https://github.com/t0k4rt/phpqrcode //或从 ...
- 用CIFilter生成QRCode二维码图片
用CIFilter生成QRCode二维码图片 CIFilter不仅仅可以用来做滤镜,它还可以用来生成二维码. CIFilterEffect.h + CIFilterEffect.m // // CIF ...
- 用Java画QRCode二维码
支付宝.微信扫码支付的二维码,第三方的类库QRCode.jar 还是很好用的.下面贴出来这个东东生成二维码的代码. 使用时注意包括图片地址.编码内容.图片属性等几个参数,支付宝的它们的扫码回调地址. ...
随机推荐
- EF Core – ExecuteUpdate and ExecuteDelete (Bulk updates 批量更新和删除)
前言 EF Core 在 SaveChanges 之后会一句一句的去更新和删除数据. 有时候这个效率是很差的. 而 SQL 本来就支持批量更新和删除, 所以是 EF Core 的缺失. 在 EF Co ...
- 线段树can you answer these queries-------hdu4027
问题描述: 给定一个数列,要求对指定区间内所有数开方,输出查询区间和 输入: 有很多个测试用例,每个用例第一行输出一个整数N,表示数列有N个数,1<=N<=100000;第二行输入N个整数 ...
- (九)Redis 哨兵机制与集群
主从复制中,如果从库发生故障了,客户端可以继续向主库或其他从库发送请求,但是如果主库发生故障了肿么办呢?读请求,那还可以由从库继续提供服务,写请求就么得办法了.此时,哨兵机制就登场了,解决3个问题: ...
- redisson内存泄漏问题排查
问题描述 最近生产有个服务突然出现频繁告警,接口P99响应时间变长,运维同学观察到相应的pod cpu飙升,内存占用很高. cpu升高问题排查是老生常谈的话题了,一般可以使用top -p pid -H ...
- Linux下执行文件删除的操作{确认!确认! 确认!再三确认!}
ubuntu 删除文件夹命令 rm -r 文件名字 ---> 强制删除XXX文件 rm -f 文件名字 ---> 强制删除XXX文件(centos) 注: linux 中, 强制删除文件的 ...
- Python | os.path.join() method
Python中的os.path.join()方法可以连接一个或多个路径组件. 此方法将各个路径组成部分,与每个非空部分路径组成部分恰好用一个目录分隔符(" /")连接起来. 如果要 ...
- SURF (Speeded Up Robust Features,加速稳健特征)
本篇文章来自wikipedia,如果需要阅读英文,可以去看一下. SURF (Speeded Up Robust Features, 加速稳健特征) 是一个稳健的图像识别和描述算法,首先于2006年发 ...
- CDQ&整体二分-三维偏序(陌上花开)
题面 本文讲cdq,整体二分的思路与做法.=分治VS数据结构 其实维度这一方面,空间几何可以是维度,像时间这样有规定顺序的词语也可能是维度. cdq 三维偏序,一般可以用一维一维的消.可以用cdq嵌套 ...
- kubernetes的Deployment
Deployment 在我们发布容器中的服务时,总共有一下几种方式: 将旧的pod停掉,创建新的pod并发布 创建新的pod,然后将旧的pod停掉 滚动式升级.创建一个新的pod,删除一个旧的pod, ...
- 2024-10-13:用go语言,给定一个二进制数组 nums,长度为 n, 目标是让 Alice 通过最少的行动次数从 nums 中拾取 k 个1。 Alice可以选择任何索引 aliceIndex
2024-10-13:用go语言,给定一个二进制数组 nums,长度为 n, 目标是让 Alice 通过最少的行动次数从 nums 中拾取 k 个1. Alice可以选择任何索引 aliceIndex ...